Typescript子命名空间和环境模块
Typescript Child Namespaces and Ambient Modules
我有一个难题要给你。我对打字还很陌生,但到目前为止我很享受这种体验。想要成为一名优秀的开发人员并将模块逻辑地分组到命名空间中,我遇到了一个罕见的问题。以下是重现问题的最简单示例。
假设你有一节课。。。我们将称之为ClassA,它引用了一个名为ClassB的类,该类位于子命名空间中。
namespace Foo {
export class ClassA {
public classB: Bar.ClassB;
public constructor() {
}
}
}
和
namespace Foo.Bar {
export class ClassB {
public constructor() {
}
}
}
Typescript对此再高兴不过了。当我想为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() {
}
}
}
Typescript突然失忆,不知道Bar是什么。它无法识别子命名空间。我已经尝试了几种方法来让它记住,比如嵌套名称空间或导出它们,但没有什么能让它识别这一点。dilly yo是什么?你们中的任何一个酷猫都知道发生了什么,或者我如何解决它并保留我的孩子名称空间?
Typescript突然失忆,不知道Bar是什么。它无法识别子命名空间。我已经尝试了几种方法来让它记住,比如嵌套名称空间或导出它们,但没有什么能让它识别这一点。什么是dilly yo
这是因为命名空间是全局。并且模块是模。因此,一旦您将模块导入到文件中,您的文件就会成为模块。https://basarat.gitbooks.io/typescript/content/docs/project/modules.html
建议
请使用模块。原因有很多:https://github.com/TypeStrong/atom-typescript/blob/8d43dd1b930a6df0ce62454a1560acfb7eee24c9/docs/out.md
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- 难以访问的JS环境中的语法错误
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 如何在生产环境中动态加载多个优化的requirejs模块
- 如何在非节点JS环境中使用打包模块
- Typescript子命名空间和环境模块
- 使用 SystemJS/jspm 在生产环境中加载异步的 es5 模块
- 当不在RequireJS环境中时,全局暴露AMD模块
- 当类型声明为环境外部模块定义时,如何声明参数类型
- 用mocha测试依赖于环境变量process.env.APP_ENV的配置模块
- 在qooxdoo桌面(浏览器环境)中加载模块
- 如何在节点模块和浏览器环境之间共享类开发
- Git 子模块 - 如何创建与环境无关的 JavaScript 库