我有这个功能:
validate(formGroup: FormGroup): {[key: string]: any}
我可以
return {validateLocation: false}
或
return {'validateLocation': false}
key:string
应该是'validateLocation': false
,为什么两者都有效? validateLocation不是字符串,对吗?
答案 0 :(得分:3)
TypeScript是JavaScript的超集。这意味着它必须与JavaScript保持一定程度的兼容性。虽然原则上您希望密钥访问权限采用'validateLocation'
或"validateLocation"
格式,但为了兼容性,还必须支持validateLocation
语法。这导致了这些结果:
let validateLocation: string = 'a';
let value1 = {validateLocation: false} //Key will be "validateLocation"
let value2 = {'validateLocation': false} //Key will be "validateLocation"
let value3 = {"validateLocation": false} //Key will be "validateLocation"
let value4 = {[validateLocation]: false} //Key will be "a"
答案 1 :(得分:2)
JavaScript对象中的键始终是字符串。语法不需要您指定它,但是,validateLocation
在这两种情况下都成为字符串键。
你可以看到:
var x = { a: 1 };
console.log(x['a']); // Prints 1, because 'a' the string is a valid key.
MDN有更多详情:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Object_literals。
对象属性名称可以是任何字符串,包括空字符串。如果属性名称不是有效的JavaScript标识符或数字,则必须用引号括起来。无效标识符的属性名称也不能作为点(。)属性访问,但可以使用类似数组的表示法(“[]”)进行访问和设置。