javascript - 如何区分 typescript 索引签名和 JS 计算属性名称
问题描述
ngOnChanges(changes: {[propName: string]: SimpleChange}): void {
console.log('Changes', changes);
}
'changes: {[propName: string]: SimpleChange}' 有什么作用?当它是可索引对象或计算属性名称时,我有点困惑。
解决方案
{[propName: string]: SimpleChange}
只是一个索引签名,它与计算属性没有任何关系。
计算属性出现在对象文字中,并且根据计算属性,打字稿将推断计算属性(如果属性是文字类型)或索引签名(如果属性是属性键基类型):
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 }
推荐阅读
- python - Python中的委托
- asp.net-mvc - 在 asp mvc 中的 Url.Action 中使用不同的域
- haskell - 如何从子函数中的函数引用类型
- javascript - 清除文本输入 onPress()
- android - 在多个 docker 容器中运行 adb
- annotations - 用于 ML 的 2d 平面图(图像)数据集
- php - require_once() 中的 PHP 致命错误可以 n
- java - 如何关闭 Java 的套接字的输出流,同时保持输入流打开以获得结果?
- amazon-web-services - AWS - 根据 CF 模板中的映射查找分配 IAM 配置文件
- ios - appDelegate 设置 rootViewController 和 viewWillAppear 不被调用?