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

如何让TypeScript识别索引签名为string的对象的key仅为string类型

问题解答

为什么val的类型是string | number

这是TypeScript的默认设计行为:JavaScript中对象的数字键会被自动隐式转换为字符串,例如obj[123]和obj['123']指向完全相同的属性,因此TS处理带字符串索引签名的类型时,keyof操作符默认返回string | number联合类型,兼容JS的隐式转换逻辑。

如何让val仅识别为string类型

两种常用实现方案:

方案1:局部类型过滤(无需修改全局配置)

使用Extract工具类型从keyof返回结果里提取仅为string的部分:

type Obj = {[key: string]: string}

const test = (obj: Obj) => {
  let val: Extract<keyof Obj, string>;
  // 此时val的类型为纯string
}

方案2:全局编译配置修改

如果希望所有带字符串索引签名的类型的keyof默认返回纯string,可在tsconfig.json中开启keyofStringsOnly编译选项:

{
  "compilerOptions": {
    "keyofStringsOnly": true
  }
}

开启后原代码无需额外修改,keyof typeof obj会直接返回string类型。

内容的提问来源于stack exchange,提问作者Alexandre Annic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:54:03