You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:47:50