你好!
首先,抱歉,如果之前有人问过这个问题,我尝试了一些谷歌搜索,但找不到任何东西(至少没有我认为是同样的问题)。我是 Typescript 的新手,所以仍然要掌握!
我正在制作一个小游戏作为一个项目来复习我的 JavaScript,并决定使用 Typescript,因为它似乎很适合模块化我的应用程序。它都在节点服务器上运行 - 如果需要,我可以提供版本号!
我有两个文件,player.ts和scene.ts,它们都属于同一个模块(因为它们是我程序的一部分,但为了模块化,我想将它们分开):
播放器.ts
module TheGame {
export class Player {
name: string;
constructor(name: string) {
this.name = name;
}
}
}
场景.ts
///<reference path="player.ts"/>
///<reference path="../typings/threejs/three.d.ts"/>
import jquery = require("three");
module TheGame {
export class Scene {
player: any;
constructor() {
this.player = new Player('test');
}
//Use of Three throughout file
}
}
这两个文件都在同一个文件夹中,当我尝试编译它们时:
tsc player.ts scene.ts --module commonjs
我得到错误:
testscene.ts(10,22): error TS2095: Could not find symbol 'Player'.
如果我删除对 Three 的引用和导入,则编译得很好,但显然我需要在类中使用 Three。(在播放器类中也需要三个,以后可能会更多)它似乎实际上编译了 JS 文件,即使有错误,我不知道为什么。
我不明白这是如何工作的?
使用外部模块和内部模块是否有一些限制?
有没有办法在它自己的 TS 文件中导入我的应用程序需要的所有外部类(三个、socket.io 等)以使其工作,如果这是一个解决方案?
提前致谢!
回答:
解决方案是,使用 commonJS,您需要显式导出和导入,并且使用模块并没有真正意义(感谢 @ssube 和 @BGR 的解决方案)。
工作代码:
播放器.ts
export class Player {
name: string;
constructor(name: string) {
this.name = name;
}
}
export = Player;
场景.ts
///<reference path="../typings/threejs/three.d.ts"/>
import jquery = require("three");
import Player = require("./player");
class Scene {
player: Player;
constructor() {
this.player = new Player('test');
}
//Use of Three throughout file
}
export = Scene;