typescript

初始化工程

1
2
npm init -y
tsc --init

安装依赖

1
2
npm install -D ts-node
npm install typescript -D

typescript知识

Pick<T, U>:从T中提取U属性,返回取到的所有属性

1
2
3
4
5
6
interface Person {
name: string
age: number
height: number
}
type Person1 = Pick<Person, 'age' | 'height'> // 等价于 type Person1 ={name: string, height: number}

Omit<T, U> :从T中剔除掉U属性,返回剩下的所有属性。

1
type Person2 = Omit<Person, 'name'> // 等价于 type Person2 ={age: number, height: number}

Record<K , T>:把T变成K的所有属性的值类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface PageInfo {
title: string;
description: string;
}

type Page = "home" | "about" | "contact"

type TypeTodo1 = Record<Page, PageInfo>
// 等价于 type TypeTodo1 = { home: PageInfo, about: PageInfo, contact: PageInfo}

type perf = Record<string, any>;//会被编译成下面的 perf1
// 等价于
type perf1 = {
[x: string]: any;
}

Exclude<T, U> :从T中剔除可以赋值给U的类型。

1
type E = Exclude<string | number, string>

Extract<T, U> :提取T中可以赋值给U的类型。

1
type I = Extract<string | number, string>;

Partial :返回所有属性变成可选的,即属性可传可不传。

1
2
3
4
5
type Animal = {
species: string;
age: number;
}
type Cat = Partial<Animal> // 等价于 type Cat ={ species?: string | undefined, age?: number | undefined }

keyof T :获取 T上已知的公共属性名的联合。

1
2
3
4
type Dog = keyof Animal; // 'species' | 'age'
let dog: Dog = "species"; //编译成功
let dog1: Dog = "age"; //编译成功
// let dog2: Dog = "name"; //编译失败 不能将类型“"name"”分配给类型“keyof Animal”。

NonNullable : 从T中剔除null和undefined

1
2
3
4
type N = NonNullable<string | number | undefined | null>; // 删除null和undifined;
let nm: N = 111; // 编译成功
let nm1: N = '1112'; //编译成功
// let nm2: N = null; //编译失败

ReturnType:获取函数返回值类型

1
2
3
4
5
6
7
8
9
10
function getUserInfo(name: string, age: number) {
return { name, age };
}
// ReturnType获取函数返回值
type UserInfo = ReturnType<typeof getUserInfo>; //{ name: string; age: number; }

const userA: UserInfo = {
name: "zhufeng",
age: 10,
}; //编译成功

Parameters :获取函数所有参数的类型元组

1
type T1 = Parameters<typeof getUserInfo>;//  [name: string, age: number]

InstanceType : 获取构造函数类型的实例类型

1
2
3
4
5
6
7
8
class Poit {
x: number = 0;
y: string = '';
}

type T20 = InstanceType<typeof Poit>; // { x:number; y:string };

let T2: T20 = { x: 111, y: '1111' };
作者

建指所向

发布于

2022-09-21

更新于

2023-11-07

许可协议