Gro*_*fit 125 module public access-modifiers typescript
在尝试使用Typescript的时候,我意识到模块中的类(用作命名空间)不可用于其他类,除非我export在它们之前编写了关键字,例如:
module some.namespace.here
{
export class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我可以使用上面这样的代码:
var someVar = new some.namespace.here.SomeClass();
Run Code Online (Sandbox Code Playgroud)
但是我只是想知道为什么使用这个关键字而不是仅仅使用public在方法级别使用的关键字来表示方法或属性应该是外部可访问的.那么为什么不使用相同的机制来使类和接口等在外部可见?
这将产生如下结果的代码:
module some.namespace.here
{
public class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud)
Fen*_*ton 164
主要原因是export匹配ECMAScript的计划.你可以争辩说"他们应该使用"导出"而不是"公开",但是"导出/私有/受保护"是一组不匹配的访问修饰符,我相信这两者之间存在细微差别.
在TypeScript中,将类成员标记为生成的JavaScript public或private对生成的JavaScript没有影响.它只是一个设计/编译时工具,可用于阻止TypeScript代码访问它不应该访问的东西.
使用export关键字,JavaScript会添加一行以将导出的项目添加到模块中.在你的例子中:here.SomeClass = SomeClass;.
所以在概念上,能见度由控制public和private仅仅是工具,而export关键字改变输出.
Rya*_*ugh 47
史蒂夫芬顿的回答中添加了一些内容:
export 已经意味着两件不同的事情(取决于它是否处于顶层); 使它意味着三分之一可能比添加public/ 更糟糕privatepublicVS export实在是微不足道.我们已经改变了一堆关键词; 这并不困难.export(unexport??)没有合适的反义词,private逻辑选择也是如此.一旦你有了private,不选择public它作为对手将是有点疯狂export修改内部模块的可见性是与ES6模块的最佳猜测对齐| 归档时间: |
|
| 查看次数: |
67671 次 |
| 最近记录: |