我在理解如何正确创建打字稿模块时遇到了一些困难。
我想要实现的是每个文件1个模块,没有变量泄漏到全局范围。
如果我有一个名为“shoppingCart.js”的js文件,其中有一个名为“addItem()”的函数,我希望只能通过“shoppingCart.addItem()”访问addItem。
我可以通过创建shoppingCart.js并在其中放入addItem()函数来实现这一点,但乍一看,似乎addItem()函数是全局范围的。
如果我将shoppingCart.js的内容包装在名为“shoppingCart”的模块中,看起来我得到了我之后的封装,但是,当我导入模块时,就像我必须对其进行双重命名,例如:
从'./shoppingCart'导入shoppingCart shoppingCart.shoppingCart.addItem()
我知道我可以将import语句中的变量更改为其他内容,但我不想,我只想输入“shoppingCart”。并且可以访问所有导出的函数类和变量。
我是否应该使用“module”关键字? 我想在模块的根目录中使用“module”,并且只使用类作为对象容器(并且在适当的情况下可能使用高度相关的函数)。
我的tsconfig.json具有以下感兴趣的属性:
composer.json
我不确定它是否有所作为,但我允许visual studio 2015将.ts文件转换为.js文件,然后使用带有gulp构建过程的browserify将它们连接成一个文件
答案 0 :(得分:1)
简而言之。
我假设您正在做的只是使用全局函数导出整个文件。当你应该使用一个类并根据你想要公开的内容创建函数时,例如:
shoppingCart.ts
export class ShoppingCart {
private _cartNum: number;
constructor(){
this._cartNum = 1;
}
public class getCartNum(){
return this._cartnum;
}
}
现在可以按如下方式使用该类:
cartCaller.ts
import {ShoppingCart} from './shoppingCart';
const cart: any = new ShoppingCart();
console.log('You have : ' + cart.getCartNum() + ' carts');
希望这能回答你的问题。
- 编辑: 这可能有助于更详细地理解ts中的模块。