如何区分打字稿索引签名和JS计算的属性名称

时间:2019-03-21 09:58:57

标签: javascript typescript

ngOnChanges(changes: {[propName: string]: SimpleChange}): void {
    console.log('Changes', changes);
  }

“更改:{[propName:字符串]:SimpleChange}”的作用是什么?在它是可索引对象还是计算属性名称之间,我有点困惑。

1 个答案:

答案 0 :(得分:1)

{[propName: string]: SimpleChange}只是一个索引签名,它与计算属性无关。

计算的属性出现在对象文字中,并且取决于所计算的属性,打字稿将推断一个计算属性(如果该属性是文字类型)或一个索引签名(如果该属性是属性键基本类型): / p>

let propName = "a"; // string 
let o = { [propName] : 10 } // {[x: string]: number;}
o["A"] // ok

const constPropName = "a"; // "a"
let o2 = { [constPropName] : 10 } // {[constPropName]: number;}
o2["A"] //err

您还可以显式声明具有计算属性的对象类型,但是该属性必须是字符串,数字或符号文字类型:

const constPropName = "a"; // "a"
type computed = { [constPropName] : number }