Typescript 类型体操
Typescript 类型体操
在网上看了一圈资料,类型体操的大致思路就是
通过extends结合三元运算符去判断与选择,通过never去过滤,通过keyof、obj[key] 去提取等等,通过这些运算最终得到更细粒度的类型值
指定类型为某一个值
// ts判断类型
type isNumber<T> = T extends Number ? true : false
type isTrue = isNumber<1>
type getTrue = (n: Number) => isTrue
const fnGetTrue: getTrue = (n: Number) => {
return true
}
fnGetTrue(1)
指定对象的键和值
// ts 指定对象的键和值
type obj = {
name:'island',
age:25
}
type keysOfObj = keyof obj // type keysOfObj = "name" | "age"
type valuesOfObj = obj[keysOfObj] // type valuesOfObj = "island" | 25
筛选出对象的某一类型的值
type filterNumVal<T extends Object> = {
[Key in keyof T]: T[Key] extends Number ? T[Key] : never
}[keyof T]
type getNumType = filterNumVal<{ island: 1, key2: 666, key3:'key3' }> // type getNumType = 1 | 666