Typescript 3.0 新特性
Max Zhang Lv4

1. 元组类型

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。比如,你可以定义一对值分别为 stringnumber 类型的元组。

1
2
3
let x: [string, number];
x = ["hello", 10]; // OK
x = [10, "hello"]; // Error

当访问一个已知索引的元素,会得到正确的类型:

1
2
console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

当访问一个越界的元素,会使用联合类型替代:

1
2
3
x[3] = "world"; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型

支持可选元素,可选元素后面的元素必须是可选的:

1
2
3
4
let x: [string, number, boolean?];
x = ["hello", 10]; // OK
x = ["hello", 10, true]; // OK
x = ["hello", true]; // Error

支持剩余参数:

1
2
3
4
5
let x: [string, ...number[]];
x = ["hello"]; // OK
x = ["hello", 10]; // OK
x = ["hello", 10, 20]; // OK
x = ["hello", "world"]; // Error

2. unknown 类型

unknown 类型表示未知的类型,它和 any 类型相似,但是更加安全。unknown 类型只能赋值给 unknown 类型和 any 类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let x: unknown;
let y: any;
let z: string;

x = 10; // OK
y = 10; // OK
z = 10; // Error

x = "hello"; // OK
y = "hello"; // OK
z = x; // Error
z = y; // OK

x = true; // OK
y = true; // OK
z = x; // Error
z = y; // OK
 评论
评论插件加载失败
正在加载评论插件