Record和as keyof typeof断言的使用
1,在声明对象时通过Record定义类型,键值对方式,将baseLabel由原来的字面量类型的key,改成了string,刚好符合Object.entries()返回的类型,。
Object.entries(obj: { [s: string]: any }): [string, any][]
2,通过断言,使用 as keyof typeof baseLabel 告诉 TypeScript 这个 key 一定是 baseLabel 的键之一
3,也是通过断言,断言Object.entries()返回的类型。
以下是报错内容
- 问题原因:key 是 string 类型,但 TypeScript 不知道它一定是 baseLabel 的有效键
- Object.entries(obj) 返回 [string, any][],所以 key 的类型是 string。
- 但 baseLabel 的类型是固定键的对象(没有 string 索引签名)。TS 不能保证任意 string 一定是 baseLabel 的键,所以拒绝 baseLabel[key]。
解析 :baseLabel[key as keyof typeof baseLabel] 的含义