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
posted @ 2022-04-02 16:48  IslandZzzz  阅读(242)  评论(0编辑  收藏  举报