TypeScript Interface中属性可以使用包含索引签名的对象类型吗?
TypeScript索引签名类型与Origin接口用法解答
{ [key: string]: any }的具体含义
这个写法是TypeScript的**索引签名(Index Signature)**语法,用来定义键名不固定的对象类型,和数组没有关联,方括号仅为该语法的固定标识:
[key: string]约定该对象的所有键(key)必须为字符串类型,其中key是自定义的形参名,可以替换成任意合法变量名- 末尾的
any约定所有键对应的值(value)可以为任意类型
这种类型通常用在无法提前枚举所有对象键名的场景,比如动态配置、后端返回的未做字段映射的透传对象等。
数组能否作为对象的key
JavaScript原生规则中,普通对象的键仅支持string和Symbol两种类型。如果主动传入数组作为对象键,运行时会自动调用数组的toString()方法转换为字符串后再作为键存储,比如传入[1,2,3]作为键,实际生效的键是字符串"1,2,3"。
因此TypeScript不支持直接声明数组类型的对象索引,就算硬写也不会在运行时生效,最终还是会转为字符串处理。
符合Origin接口定义的合法示例
// 示例1:同时携带areaNum和open属性 const demo1: Origin = { areaNum: 12, open: { "showFilter": true, "currentPage": "dashboard", "userConfig": { theme: "dark", noticeSwitch: false }, "tags": ["admin", "operator"] } } // 示例2:仅携带open属性(因为areaNum是可选属性) const demo2: Origin = { open: { "disabled": true, "extraData": null } }
内容的提问来源于stack exchange,提问作者Julio Rodríguez
相关产品推荐
相关产品推荐

