【TypeScript】操作符&关键字
2021/09/09 09:34:04
- 使用
&将多个类型合并为新的交叉类型,新类型同时拥有了其他类型的成员。 - 使用
|表示联合类型,如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。 - 类型谓词关键字:
is,用于进行类型保护。 - 添加
!后缀表示断定确实已赋值。 - 用
type关键字设置类型别名,起别名不会新建一个类型 - 它创建了一个新名字来引用那个类型。 keyof, 索引类型查询操作符,对于任何类型T,keyof T的结果为T上已知的公共属性名的联合。T[K], 索引访问操作符。- 使用
extends关键字实现接口继承 implements关键字让类实现接口。interface定义接口。- 修饰符
public、private、protected。 as模块别名。declare声明文件。
索引类型查询操作符和索引访问操作符
function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {
return names.map(n => o[n]);
}
interface Person {
name: string;
age: number;
}
let person: Person = {
name: 'Jarid',
age: 35
};
let strings: string[] = pluck(person, ['name']); // ok, string[]
- 索引类型查询操作符
keyof,在这里keyof T等价于'name' | 'age'。 - 索引访问操作符
T[K],在这里表示person['name']具有Person['name']类型——在上例中则是string类型,T[K][]表示T[K]类型的数组。
映射类型
Readonly、Partial、Pick、Record 是 TypeScript 内置的泛型类型。
- 根据一个已知类型映射出一个新类型。
interface Person {
name: string;
age: string;
}
type Readonly<T> = {
readonly [P in keyof T]: T[P];
}
type Partial<T> = {
[P in keyof T]?: T[P];
}
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
}
type Record<K extends string, T> = {
[P in K]: T;
}
type PersonPartial = Partial<Person>;
type ReadonlyPerson = Readonly<Person>;