javascript - 如何区分 typescript 索引签名和 JS 计算属性名称

标签 javascript typescript

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

“changes: {[propName: string]: SimpleChange}”有什么作用?我对它是可索引对象还是计算属性名称有点困惑。

最佳答案

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

计算属性出现在对象文字中,根据计算属性,Typescript 将推断计算属性(如果该属性是文字类型)或索引签名(如果该属性是属性键基本类型):

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 }

关于javascript - 如何区分 typescript 索引签名和 JS 计算属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55277805/

相关文章:

javascript - 我的 Javascript 和 Python 代码是否因为指数或其他原因给出了不同的答案?

javascript - 获取从 XML 到 JavaScript 的变量值。纯粹的方式

javascript - 在 url 上添加部分时无法识别 Cookie(Javascript)

javascript - typescript 将此绑定(bind)到数组排序

javascript - 像:这样在nestjs中从服务中抛出错误的好方法吗

javascript - react : trigger onChange if input value is changing by state?

javascript - 显示阅读更多按钮

reactjs - react 导航 5.x : TS2345: Argument of type ' ... ' is not assignable to parameter of type '... '

javascript - 在 Angular 中存储大型静态数组的最佳做法是什么?

javascript - 我试图根据 Angular 8 中的值禁用和启用复选框