在目录层次结构之外时,是否重新导入了打字稿类/静态属性?

时间:2018-09-03 23:58:10

标签: typescript

我遇到了一个问题,即我的层次结构中的一部分导入似乎创建了全新的类型-也就是说,它们不属于同一类,并且不共享静态var。

假设我有这样的目录结构:

app/
|-main.ts
|-static/
|-|-StaticClass.ts
|-consumer/
|_|-Consumer.ts

otherConsumer/
|-OtherConsumer.ts

Main.ts:

import { StaticClass } from './static/StaticClass';
import { Consumer } from './Consumer';
import { OtherConsumer } from '../otherConsumer/OtherConsumer';
export class Main {
   constructor() {
      StaticClass.INIT();
      new Consumer();
      new OtherConsumer();
   }
}

StaticClass.ts:

export class StaticClass {
    public static A:string;
    public static INIT():void {
        StaticClass.A = "Hello";
    }
}

Consumer.ts:

import { StaticClass } from './static/StaticClass';

export class Consumer {
    constructor() {
        alert (StaticClass.A);
    }
}

在我们的示例中,OtherConsumer.ts与Consumer.ts具有相同的作用。

运行Main时,消费者输出“ Hello”,OtherConsumer输出“ undefined”。

如果将“ static /”目录在层次结构中上移一个,成为“ app”和“ otherConsumer”的同级(以及所有包含路径也相应更改),则两个使用者都将输出“ Hello”。如果将otherConsumer目录下移到应用程序目录中,两者都都说“ Hello”。

这是怎么回事?因为OtherConsumer在主应用程序目录之外,它是否在其他“需要”名称空间中?

1 个答案:

答案 0 :(得分:1)

  

运行Main时,消费者输出“ Hello”,OtherConsumer输出“ undefined”。

最可能的原因是循环依赖性。运行时将传递一个undefined来临时解决它。

更多

https://nodejs.org/api/modules.html#modules_cycles