我正在学习打字稿。我读过关于命名空间和import
/ 的文章export
。
在我自己的项目中,我创建了一些类。由于这是我的第一个项目,我忘记将export
关键字放在其中一些文件上,但我注意到它们仍然可以在其他文件中访问而无需导入它们。我还注意到一个带有导入的类需要导出/导入才能在其他地方使用。
为什么我可以这样做?这样做可以吗?什么时候export
强制使用,什么时候不使用?
我想我应该总是export
/import
我的类和模块,但是没有它们代码也能工作。
class CoordinateModel {
public x: number;
public y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
在另一个文件中,我可以使用它
import * as d3 from "d3";
module Mouse {
export function getMousePosition(container:d3.ContainerElement): CoordinateModel {
var m = d3.mouse(container);
return new CoordinateModel(m[0], m[1]);
}
export function showMousePositionInElement(elementClassName: string, container: d3.ContainerElement) {
var m = Mouse.getMousePosition(container);
d3.select("." + elementClassName).html(m.x + ", " + m.y);
}
}
export = Mouse;
如果您的文件没有顶级import
或export
语句,那么它在全局范围内,这意味着所有顶级项目在任何地方都可见,不需要import
任何东西。
这基本上是 ES6 模块出现之前的旧 JavaScript 做事方式。旧的 TypeScript module
(现在称为namespace
)语法是一种在全局范围内避免名称冲突的方法。编写模块的新 JavaScript(和 TypeScript)方式是使用import
和export
语法。
所以是的,现在你应该这样做 export class CoordinateModel
,在这种情况下,其他文件需要import
从文件中获取它,而不是依赖它在全局范围内。在大多数情况下,您不需要namespace
(您编写的内容module Mouse
,也可以namespace Mouse
使用最新的语法编写,旨在消除 ES6 模块的歧义)。您可以在文档中阅读有关命名空间和模块的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句