TypeScript 1.5
ES6 模块
TypeScript 1.5 支持 ECMAScript 6(ES6)模块。ES6 模块实际上是 TypeScript 外部模块的新语法:ES6 模块是单独加载的源文件,可能导入其他模块并提供大量可从外部访问的导出。ES6 模块具有几个新的导出和导入声明。建议将 TypeScript 库和应用程序更新为使用新语法,但这不是必需的。新的 ES6 模块语法与 TypeScript 原有的内部和外部模块结构共存,并且可以随意混合和匹配结构。
导出声明
除了现有的
export
用于装饰声明的 TypeScript 支持外,还可以使用单独的导出声明导出模块成员,可以使用
as
子句为导出指定不同的名称。
interface Stream { ... }
function writeToStream(stream: Stream, data: string) { ... }
export { Stream, writeToStream as write }; // writeToStream exported as write
导入声明也可以选择使用
as
子句为导入指定不同的本地名称。例如:
import { read, write, standardOutput as stdout } from "./inout";
var s = read(stdout);
write(stdout, s);
作为单个导入的替代方法,可以使用名称空间导入来导入整个模块:
import * as io from "./inout";
var s = io.read(io.standardOutput);
io.write(io.standardOutput, s);
再出口
使用
from
子句模块可以将给定模块的输出复制到当前模块而不引入本地名称。
export { read, write, standardOutput as stdout } from "./inout";
export *
可以用来重新导出另一个模块的所有导出。这对创建汇总其他几个模块的输出的模块很有用。
export function transform(s: string): string { ... }
export * from "./mod1";
export * from "./mod2";
默认导出
导出默认声明指定成为模块的默认导出的表达式:
export default class Greeter {
sayHello() {
console.log("Greetings!");
}
哪些内容可以使用默认导入导入:
import Greeter from "./greeter";
var g = new Greeter();
g.sayHello();
裸露进口
“裸导入”可以用于导入模块仅用于其副作用。
import "./polyfills";
有关模块的更多信息,请参阅 ES6模块支持规范 。
在声明和作业中解构
TypeScript 1.5 增加了对 ES6 解构声明和赋值的支持。
声明
解构声明引入一个或多个命名变量,并使用从对象的属性或数组元素中提取的值对它们进行初始化。
例如,下面的示例声明变量
x
,
y
和
z
,并且将它们初始化为
getSomeObject().x
,
getSomeObject().y
和
getSomeObject().z
分别为:
var { x, y, z} = getSomeObject();
解构声明也适用于从数组中提取值:
var [x, y, z = 10] = getSomeArray();
同样,解构可以用在函数参数声明中:
function drawText({ text = "", location: [x, y] = [0, 0], bold = false }) {
// Draw text
// Call drawText with an object literal
var item = { text: "someText", location: [1,2,3], style: "italics" };
drawText(item);
分配
解构模式也可用于常规赋值表达式。例如,交换两个变量可以写成单个解构赋值:
var x = 1;
var y = 2;
[x, y] = [y, x];
namespace
关键词
TypeScript 使用
module
关键字来定义“内部模块”和“外部模块”; 这对于新开发 TypeScript 的开发者来说有点混乱。“内部模块”更接近大多数人称之为命名空间的东西; 同样,JS 中的“外部模块”现在真的只是模块。
注:仍然支持先前定义内部模块的语法。
之前 :
module Math {
export function add(x, y) { ... }
}
之后 :
namespace Math {
export function add(x, y) { ... }
}
let
和
const
支持
目标 ES3 和 ES5 支持 ES6
let
和
const
声明。
常量
const MAX = 100;
++MAX; // Error: The operand of an increment or decrement
// operator cannot be a constant.
块的范围
if (true) {
let a = 4;
// use a
else {
let a = "string";
// use a
alert(a); // Error: a is not defined in this scope
for..of 支持
TypeScript 1.5 增加了对 ES6 / ES5 阵列上......循环的支持,以及在定位 ES6 时完全支持 Iterator 接口。
示例
当针对这些版本时,TypeScript 编译器会将阵列转换为惯用的 ES3 / ES5 JavaScript:
for (var v of expr) { }
将被排放为:
for (var _i = 0, _a = expr; _i < _a.length; _i++) {
var v = _a[_i];
}