TypeScript中如何使用字符串作为字面量类型键的索引?
解决TypeScript中字符串变量索引字面量键对象的类型错误
当使用string类型变量索引仅包含字面量类型键的对象时,TypeScript会抛出类型错误,因为它无法确认变量值是否匹配对象的合法键。以下是几种可行的解决方法:
方法一:收窄变量类型为对象的字面量键类型
通过类型断言或类型守卫,将string类型的变量缩小为对象键的字面量类型,让TypeScript确认其合法性:
type AType = { 'v1.41': {} } const x: AType = { 'v1.41': {} } // 方式1:类型断言 const version = 'v1.41' as 'v1.41'; x[version]; // 正常访问 // 方式2:类型守卫 function isATypeKey(key: string): key is keyof AType { return key === 'v1.41'; } const version2: string = 'v1.41'; if (isATypeKey(version2)) { x[version2]; // 类型被收窄,无错误 }
方法二:为对象类型添加字符串索引签名
如果你的对象可能包含更多同类型值的字符串键,可以给类型添加字符串索引签名,允许任意字符串作为索引(需保证返回值类型与现有键值兼容):
type AType = { 'v1.41': {}; [key: string]: {}; // 字符串索引签名 } const x: AType = { 'v1.41': {} } const version: string = 'v1.41'; x[version]; // 无错误
方法三:直接指定变量类型为keyof AType
如果能保证变量值一定是对象的合法键,可以将变量类型定义为keyof AType(即对象所有键的联合类型):
type AType = { 'v1.41': {} } const x: AType = { 'v1.41': {} } const version: keyof AType = 'v1.41'; x[version]; // 正常访问
内容的提问来源于stack exchange,提问作者user21978638
相关产品推荐
相关产品推荐

