这是我参与更文挑战的第8天,活动详情查看: 更文挑战es6
TypeScript与ECMAScript 2015同样,任何包含顶级import或者export的文件都被当成一个模块。相反地,若是一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的(所以对模块也是可见的)。web
任何声明(好比变量,函数,类,类型别名或接口)都可以经过添加export关键字来导出。markdown
export interface Person {
name: string
age: number
}
export interface StringValidator {
isAcceptable(s: string): boolean;
}
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
复制代码
导出语句很便利,由于咱们可能须要对导出的部分重命名,因此上面的例子能够这样改写:函数
class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export { ZipCodeValidator };
export { ZipCodeValidator as mainValidator };
复制代码
或者一个模块能够包裹多个模块,并把他们导出的内容联合在一块儿经过语法:export * from "module"。post
export * from "./StringValidator"; // exports interface StringValidator
export * from "./LettersOnlyValidator"; // exports class LettersOnlyValidator
export * from "./ZipCodeValidator";
复制代码
import { ZipCodeValidator } from "./ZipCodeValidator";
const myValidator = new ZipCodeValidator()
复制代码
也能够对导入内容重命名ui
import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";
let myValidator = new ZCV();
复制代码
import * as validator from "./ZipCodeValidator";
let myValidator = new validator.ZipCodeValidator();
复制代码
export default class Person {...}
复制代码
import Person from "./Person.ts"
复制代码
CommonJS和AMD的环境里都有一个exports变量,这个变量包含了一个模块的全部导出内容。url
CommonJS和AMD的exports均可以被赋值为一个对象, 这种状况下其做用就相似于 es6 语法里的默认导出,即 export default语法了。虽然做用类似,可是 export default 语法并不能兼容CommonJS和AMD的exports。spa
为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。3d
若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require("module")来导入此模块。code
ZipCodeValidator.ts
let numberRegexp = /^[0-9]+$/;
class ZipCodeValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export = ZipCodeValidator;
复制代码
Test.ts
import zip = require("./ZipCodeValidator");
// Some samples to try
let strings = ["Hello", "98052", "101"];
// Validators to use
let validator = new zip();
// Show whether each string passed each validator
strings.forEach(s => {
console.log(`"${ s }" - ${ validator.isAcceptable(s) ? "matches" : "does not match" }`);
});
复制代码
假如你不想在使用一个新模块以前花时间去编写声明,你能够采用声明的简写形式以便可以快速使用它。
declarations.d.ts
declare module "hot-new-module";
简写模块里全部导出的类型将是any。
import x, {y} from "hot-new-module";
x(y);
复制代码