来自Typescript中的foo import *`

时间:2014-06-27 03:00:15

标签: import module namespaces typescript

我正在开发一个相当小的Typescript代码库,它已经足够大,可以分成多个文件。这是一个二十一点游戏。我目前有一堆代码如下:

var player = new Player();
player.hand = new Hand([new Card(), new Card(), new Card()]);

在我的主文件app.ts中。为了我的理智,我想将Player课程分成一个模块,将HandCard分成一秒。但是,我希望保留PlayerCardHand所有可用的顶级范围,原因有两个。首先,要避免这样的事情:

var player = new Players.Player();
player.hand = new Cards.Hand([new Cards.Card(), new Cards.Card(), new Cards.Card()]);

第二,因为我认为这表明我不想暗示CardsHand之间的等级关系。 Cards包含CardDeckHand等内容 - 我认为这是最常用的名称选择(而非类似CardCollections),但是阅读Cards.Hand让我觉得HandCards,而不是from Cards import Card, Hand, Deck from Players import Player

在Python中,我会写:

from Cards import *
from Players import *

{{1}}

The Typescript handbook基本上建议您为所需的一切创建别名,但在我看来,您仍然无法将任何内容导入顶级命名空间。

这是否存在于Typescript中?

2 个答案:

答案 0 :(得分:2)

  

你为所需的一切制作了别名,但在我看来,你仍然无法将任何东西导入顶级命名空间

不是全局全局命名空间,而是文件中的顶级命名空间,您可以执行以下操作:

var Hand = Card.Hand; 
var Player = Players.Player;

答案 1 :(得分:1)

除@basarat答案外,使用--module commonjs上的tsc标记将您的文件构建为CommonJs模块,并使用import...require语法

为了简单起见,每个类只有一个文件

播放器中的

class Player {


}
export = Player

in Hand.ts

class Hand {


}
export = Hand
在app.ts中

import Hand = require('./Hand')
import Player = require('./Player')

var player = new Player()

请注意,.ts

中没有require分机号码

作为一个额外的好处,您可以轻松访问Node JS的整个世界