如何使用打字稿模块

时间:2016-10-26 20:41:19

标签: javascript typescript

我在理解如何正确创建打字稿模块时遇到了一些困难。

我想要实现的是每个文件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将它们连接成一个文件

1 个答案:

答案 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中的模块。

How do I use namespaces with TypeScript external modules?

相关问题