请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

索引签名

老师,你好,关于索引签名这里我有点不理解
举个例子

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那种

正在回答 回答被采纳积分+3

1回答

提问者 aznmoe 2019-06-13 17:08:15

我把我写的那个 demo 放到 项目中的时候也报错了,应该是 `tsconfig.json` 的影响吧,之前我写的demo 是随便放到一个地方的。


继续说下我对索引签名的理解吧,老师 麻烦你看下对不对。


我们在定义一个接口的时候,当一个变量尝试实现这个接口的时候,那么这个变量必须要包含这个接口的每一个属性了,不可以多,也不可以少。


但是,索引签名就不一样了,除去前面所说的它是一种约束外,其实另一方面也是一种解放?

因为 可以定义 接口当中不存在的属性值了,只要 属性的类型 对应上就好


0 回复 有任何疑惑可以回复我~
  • 你的理解基本没问题,索引签名可以允许接收一些未定义的属性,只要属性的类型匹配即可。
    回复 有任何疑惑可以回复我~ 2019-06-13 17:37:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信