我正在开发一个相当小的Typescript代码库,它已经足够大,可以分成多个文件。这是一个二十一点游戏。我目前有一堆代码如下:
var player = new Player();
player.hand = new Hand([new Card(), new Card(), new Card()]);
在我的主文件app.ts
中。为了我的理智,我想将Player
课程分成一个模块,将Hand
和Card
分成一秒。但是,我希望保留Player
,Card
和Hand
所有可用的顶级范围,原因有两个。首先,要避免这样的事情:
var player = new Players.Player();
player.hand = new Cards.Hand([new Cards.Card(), new Cards.Card(), new Cards.Card()]);
第二,因为我认为这表明我不想暗示Cards
和Hand
之间的等级关系。 Cards
包含Card
,Deck
,Hand
等内容 - 我认为这是最常用的名称选择(而非类似CardCollections
),但是阅读Cards.Hand
让我觉得Hand
是Cards
,而不是from Cards import Card, Hand, Deck
from Players import Player
。
在Python中,我会写:
from Cards import *
from Players import *
或
{{1}}
The Typescript handbook基本上建议您为所需的一切创建别名,但在我看来,您仍然无法将任何内容导入顶级命名空间。
这是否存在于Typescript中?
答案 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的整个世界