索引签名
来源:9-2 合并配置的设计与实现 - 配置合并策略(上)

aznmoe
2019-06-13
老师,你好,关于索引签名这里我有点不理解
举个例子
export interface Test {
[propName: string]: number
}
const a: Test = {
aa: 12,
bb: 34,
cc: 'jfeiaoj', // 报错
}
在这里 声明 变量 a
类型 为 Test
接口的时候,就会约束 变量 a
的索引 仅能为 string
其 对应的 value
只可为 number
。
你不能说 让 key 为 一个 object
, value 值为 string
之类的。
以上 是我对 索引签名的 理解,即它是一个约束!!!
视频当中老师说 因为 key 是一个未知的值而报错,那么在我下面这个例子当中,也没有报错啊
export interface Test {
aa: number,
bb: number,
// [propName: string]: number
}
const a: Test = {
aa: 12,
bb: 34,
}
function out(config: Test, key: string) {
return config[key]
}
我不能理解视频中 报错的原因。老师可以解释下吗。。最好能有个 简单demo那种
写回答
1回答
-
aznmoe
提问者
2019-06-13
我把我写的那个 demo 放到 项目中的时候也报错了,应该是 `tsconfig.json` 的影响吧,之前我写的demo 是随便放到一个地方的。
继续说下我对索引签名的理解吧,老师 麻烦你看下对不对。
我们在定义一个接口的时候,当一个变量尝试实现这个接口的时候,那么这个变量必须要包含这个接口的每一个属性了,不可以多,也不可以少。
但是,索引签名就不一样了,除去前面所说的它是一种约束外,其实另一方面也是一种解放?
因为 可以定义 接口当中不存在的属性值了,只要 属性的类型 对应上就好
012019-06-13
相似问题