类型操作

typeof

获取数据的类型

1
2
3
4
5
6
let str = 'kkk'

let t = typeof str // 使用typeof获取str的类型,返回string给变量t (原生js的typeof使用)

type myType = typeof str // 使用typeof获取str的类型,返回string给类型myType (TS的typeof使用)

keyof

获取类型的所有key的集合

1
2
3
4
5
6
7
8
// 使用示例1
interface Person{
name: string;
age: number;
}

type PersonKeys = keyof Person
// 等同: type PersonKeys = 'name' | 'age'; // 注意是key的集合,不是值的集合
1
2
3
4
5
6
7
8
9
10
// 使用示例2
let p1 = {
name: 'xx',
age: 28
}

// keyof typeof p1 的作用,首先typeof将p1对象的类型取出,keyof再将类型的key集合取出,结果:'name' | 'age'
function getPersonVal(k: keyof typeof p1){
return p1[k]
}

in

内部使用for...in对类型进行遍历

1
2
3
4
5
6
7
8
9
10
11
interface Person{
name: string;
age: number;
}

type PersonKeys = keyof Person; // 'name' | 'age'
type NewPerson = {
[k in PersonKeys]: string
// 也可写成 [k in 'name' | 'age']: string
// 或 [k in keyof Person]: string
} // {name: string; age: string;}