模块、命名空间和三斜线指令
“内部模块”现在称做“命名空间”
“外部模块”现在则简称为“模块”
// 导出
// 导出声明 任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加export关键字来导出
export interface StringValidator {
isAcceptable(s: string): boolean;
}
class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5;
}
}
// 导出语句
export { ZipCodeValidator };
// 别名导出
export { ZipCodeValidator as mainValidator };
// 全部导出
export * from "module"
// 导入
// 导入一个模块中的某个导出内容
import { ZipCodeValidator } from "./ZipCodeValidator";
// 别名导入
import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";
// 将整个模块导入到一个变量,并通过它来访问模块的导出部分
import * as validator from "./ZipCodeValidator";
let myValidator = new validator.ZipCodeValidator();
// 全部导入
import "./my-module.js";
// 每个模块都可以有一个default导出。 默认导出使用 default关键字标记;并且一个模块只能够有一个default导出。 需要使用一种特殊的导入形式来导入 default导出
// 声明变量使用关键字declare来表示声明其后面的全局变量的类型
declare let $: JQuery;
export default $;
import $ from "JQuery";
// 若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require("module")来导入此模块
export = ZipCodeValidator;
import zip = require("./ZipCodeValidator");
// 模块声明通配符
declare module "*!text" {
const content: string;
export default content;
}
import fileContent from "./xyz.txt!text";
// 命名空间
declare namespace D3 {
export interface Selectors {
select: {
(selector: string): Selection;
(element: EventTarget): Selection;
};
}
export interface Event {
x: number;
y: number;
}
export interface Base extends Selectors {
event: Event;
}
}
declare var d3: D3.Base;
/// <reference path="..." />指令是三斜线指令中最常见的一种。 它用于声明文件间的 依赖。
// 可以把它理解为单行注释,只不过它比较特殊,它会被当成编译器指令解析使用
// 你也可以把它理解的mport,它可以告诉编译器在编译过程要引入的额外的文件
// 必须出现在首行,否则就为单行注释
// myModules.d.ts
declare module "SomeModule" {
export function fn(): string;
}
// myOtherModule.ts
/// <reference path="myModules.d.ts" /> // 用于声明文件之间的依赖
/// <reference types="..." /> // 用于声明对某个包的依赖
/// <reference no-default-lib="true" /> //用于将一个文件标记成默认库
/// <amd-module /> // 用于给编译器传人一个可选的模块名
/// <amd-dependency path="x"/> // 告诉编译器有个非ts模块需要注入,不过指令已经使用import “x”语句代替
import * as m from "SomeModule";