我只是试图了解TypeScript,
假设我有一个像这样的模块animals.ts
:
export module Animals {
export interface Animal {
name(): void;
}
export class Elephant implements Animal {
constructor() {
}
public name() {
console.log("Elephant");
}
}
export class Horse implements Animal {
constructor() {
}
public name() {
console.log("Horse");
}
}
}
我想在另一个文件animals_panel.ts
中使用此模块:
import animals = require("animals")
module AnimalPanel {
var animal = new animals.Animals.Elephant();
animal.name();
}
animals.Animals.Elephant()
对我来说似乎有点奇怪,我原以为Animals.Elephant()
。我做错了什么或者这是正确的行为吗?import animals = require("animals")
模块中导入AnimalPanel
(我尝试这样做时会出错)?答案 0 :(得分:32)
当您使用外部模块时,每个文件都是一个模块。因此,在文件中声明本地内部模块,例如export module Animals {
导致不必要的双重间接。
我会将animals.ts编码为:
export interface Animal {
name(): void;
}
export class Elephant implements Animal {
constructor() {
}
public name() {
console.log("Elephant");
}
}
export class Horse implements Animal {
constructor() {
}
public name() {
console.log("Horse");
}
}
然后将其用作:
import animals = require("animals")
module AnimalPanel {
var animal = new animals.Elephant();
animal.name();
}
PS:内部/外部打字稿模块的主题视频:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
答案 1 :(得分:3)
您可以使用两种语法export/import
:
(AMD风格)Require
语法:
var animals = require("animals");
使用从{ES6开始支持的import
样式:
import { Elephant, Horse } from "animals";
TypeScript支持export =
为传统的CommonJS
和AMD
工作流建模。所以这两种变体都可以使用,我建议使用2nd,因为它更强大的机制。
有关它的更多详细信息,请参阅official the TypeScript Modules web page。