与Angular 2和SystemJS

时间:2016-03-29 08:11:02

标签: typescript angular systemjs

我有一个问题,我认为是由循环依赖引起的。经过一番广泛的研究,我无法找到解决方案。它看起来与此问题有关:TypeScript中的TypeError: b is undefined in __extends,但它对我没有帮助。

我已经能够在this plunker中简化问题。

基本上有3个类:

  • A,其中包含A
  • 数组
  • 继承自B
  • 的班级A
  • 班级F,可根据值创建AB的工厂

这样做的目的是处理一个可以是动态的参数列表(每个A是一个参数,可以是一个数组),其中BA的特化处理文件。我尝试删除工厂,但只有AB我仍然遇到同样的错误:

TypeError: b is undefined Error loading http://localhost:3000/app/main.js

以下是 a.ts

的代码
import { F } from './f';

export class A {
  children: A[]

  constructor(hasChildren: boolean = false) {
    if (hasChildren) {
      for (var i = 0 ; i < 10 ; ++i) {
        let isB = (Math.random() * 2) > 1;
        this.children.push(F.createObject(isB))
      }
    }
  }
}

b.ts

import { A } from './a';

export class B extends A {
}

f.ts

import { A } from './a'
import { B } from './b'

export class F {
  static createObject(isB: boolean): A {
    if (isB) {
      return new B
    } else {
      return new A
    }
  }
}

1 个答案:

答案 0 :(得分:3)

你不能以这种方式拥有循环依赖。您可以使用界面

来解决

Plunker example

<强> tata.ts

import { IToto } from './itoto';


export class Tata implements IToto {
  children: Toto[]
}

<强> toto.ts

import { Tata } from './tata';
import { IToto } from './itoto';

export class Toto implements IToto{
  children: Toto[] = [];

  constructor(hasChildren: boolean = false) {
     ...
  }
}

<强> itoto.ts

export interface IToto {
  children: Toto[]
}

另见Circular dependency injection angular 2