keyof

288 阅读1分钟

作者:天地会珠海分舵 链接:zhuanlan.zhihu.com/p/402278035 来源:知乎

获取接口属性类型的联合值

interface Student {
   name: string;
   age: number;
}

这时如果我们对interface使用keyof

type propKeys = keyof Student // name | age

我们知道输出的是以接口属性的键命组成的联合类型: ‘name’ | 'age’

这时我们如果要获得各个键的属性所组成的联合类型,比如上面的string和number,可以这样做

type propTypes = Student[keyof Student]

这里的propTypes就是个联合类型: string | number

in keyof 用法示例

interface BrowserCache {
    TOKEN_CACHE: string;
    ID_CACHE: number;
}


type TCacheExpiretTime = {
    [key in keyof BrowserCache]: Date;
}

TCacheExpireTime最终类型推断将会是

type TCacheExpiretTime = {
    TOKEN_CACHE: Date | undefined;
    ID_CACHE: Date | undefined;
}

如果想每个属性可选,可将代码修改成

type TCacheExpiretTime = {
    [key in keyof BrowserCache]?: Date;
}

TCacheExpireTime最终类型推断将会是

type TCacheExpiretTime = {
    TOKEN_CACHE?: Date | undefined;
    ID_CACHE?: Date | undefined;
}