Typesrcript输入{[key:string]:any}

时间:2017-01-28 15:39:49

标签: typescript

我有这个功能:

validate(formGroup: FormGroup): {[key: string]: any} 

我可以

return {validateLocation: false}

return {'validateLocation': false}

key:string应该是'validateLocation': false,为什么两者都有效? validateLocation不是字符串,对吗?

2 个答案:

答案 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标识符或数字,则必须用引号括起来。无效标识符的属性名称也不能作为点(。)属性访问,但可以使用类似数组的表示法(“[]”)进行访问和设置。