[key: string]: T 索引签名

最后更新:2026-10-22

[key: string]: T 索引签名

索引签名描述"键名不固定、但键的值类型统一"的对象,比如字典、计数器、配置映射。写法是 [key: string]: T。

分组类型组合
类型语法
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

const dict: { [key: string]: number } = {};
dict["a"] = 1;
// 等价的工具类型写法
const same: Record<string, number> = {};

⚙️ 参数

[key: string]键类型只能是 string、number、symbol 或其联合;key 名字可自取
[i: number][i: number]: T 描述"按下标取值"的结构;数字索引值类型必须是字符串索引的子类型

返回值:无返回值——索引签名是纯类型层概念,不产生任何运行时代码。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

180 0

(转译后运行输出;scores["Bob"] 类型是 number,strict 下不报错——索引签名声明"所有键都存在")

💡 要点

ℹ️ 说明 Record<string, number> 与索引签名 { [key: string]: number } 含义相同,工具类型写法更常用。
⚠️ 注意 索引签名让"任何键"都合法:strict 下 scores["Bob"] 也不报错,typo 会被放过。键名集合有限时改用 Record<"a" | "b", T> 或映射类型。
💡 提示 值类型不统一时写成联合:{ [key: string]: string | number },读取后再按类型收窄。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q 索引签名和 Record<K, V> 什么关系?
A 表达力等价,Record 本质上就是映射类型实现的索引签名。日常写 Record 更简洁,键集合还能精确到字面量联合。
Q 为什么访问不存在的键不报错?
A 索引签名的语义就是"所有 string 键都存在且类型为 T"。要编译器拦 typo,用 Record<"a" | "b", T> 限定键名,或开 noUncheckedIndexedAccess。
Q 数字索引和字符串索引能共存吗?
A 可以,但数字索引的值类型必须是字符串索引值类型的子类型(JS 里数字键最终也是字符串键)。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏