我有一个难题。我对Typescript很新,但到目前为止,我一直很享受这段经历。想要成为一名优秀的开发人员,并将我的模块逻辑分组到名称空间中,我遇到了罕见的问题。这是重新创建问题的最简单示例。
假设您有一个类...我们将其称为ClassA,它引用一个名为ClassB的类,它位于子命名空间中。
namespace Foo {
export class ClassA {
public classB: Bar.ClassB;
public constructor() {
}
}
}
和
namespace Foo.Bar {
export class ClassB {
public constructor() {
}
}
}
打字稿对此并不高兴。好吧,当我想为ClassA导入内容时,我会把它放在命名空间中,如下所示:
namespace Foo {
import SomeClass = SomewhereElse.SomeClass;
export class ClassA {
public classB: Bar.ClassB;
public constructor() {
}
}
}
再次......我们很酷。但是如果我想导入环境模块呢?
namespace Foo {
import * as SockJS from "sockjs-client"; // TS1147 GRUMBLE! CAN'T DO DAT HERE!
export class ClassA {
public classB: Bar.ClassB;
public constructor() {
}
}
}
好的,没关系。我只是将它移到命名空间之外,就像它告诉我的那样。
import * as SockJS from "sockjs-client";
namespace Foo {
export class ClassA {
public classB: Bar.ClassB; // TS2503:Now you're just a Bar that I used to know
public constructor() {
}
}
}
突然间,打字稿会失忆,并且不知道Bar是什么。它不识别子命名空间。我已经尝试了几种方法让它记住像嵌套命名空间或导出它们,但没有什么能让它识别出来。什么是哟哟?你们中的任何一个很酷的猫知道发生了什么,或者我如何解决它并保留我的孩子命名空间?
答案 0 :(得分:2)
突然间,打字稿会失忆,不知道Bar是什么。它无法识别子名称空间。我已经尝试了几种方法让它记住像嵌套命名空间或导出它们,但没有什么能让它识别出来。什么是哟哟
因为名称空间是全球。 模块是模块化。因此,只要将模块导入文件,就会将文件变为模块。 https://basarat.gitbooks.io/typescript/content/docs/project/modules.html
请使用模块。有很多原因:https://github.com/TypeStrong/atom-typescript/blob/8d43dd1b930a6df0ce62454a1560acfb7eee24c9/docs/out.md