Javascript Object.key在typescript中使用数字
给我:Javascript Object.key在typescript中使用数字,javascript,arrays,typescript,object,ecmascript-6,Javascript,Arrays,Typescript,Object,Ecmascript 6,给我: Type“string[]”不能分配给Type“number[]” 为什么Typescript假定为字符串[]?在这里创建数字数组的正确方法是什么?对象属性名称始终是字符串,如果要动态将属性名称转换为数字,可以使用映射(数字): 请注意,如果您的属性名无法转换为数字,您将在sizes数组中得到NaN对象。键始终返回字符串数组: const obj={prop:'prop'}; console.log(Object.keys的类型(obj)[0])所有键都是JavaScript中的字符串
Type“string[]”不能分配给Type“number[]”
为什么Typescript假定为
字符串[]
?在这里创建数字数组的正确方法是什么?对象属性名称始终是字符串,如果要动态将属性名称转换为数字,可以使用映射(数字)
:
请注意,如果您的属性名无法转换为数字,您将在sizes数组中得到
NaN
对象。键始终返回字符串数组:
const obj={prop:'prop'};
console.log(Object.keys的类型(obj)[0])代码>所有键都是JavaScript中的字符串-只需使用map
:
const sizes: number[] = Object.keys(foo).map(Number);
这只适用于数字字符串-例如,如果它是一个包含小数的欧洲字符串,那么它将是NaN
,并且永远不会有好的结果
控制台日志(编号(“10,7”)代码>Javascript对象没有数字键!所有键都是字符串。始终。如果要将其他内容映射到值,则应使用映射
var numObj={1:'one',2:'two'};
var numObjKey=Object.keys(numObj);
console.log(typeof numObjKey[0]);
console.log(numObjKey.map的类型(编号)[0])代码>
为什么Typescript采用字符串[]?正确的方法是什么
在这里创建一个数字数组
由于对象属性名称始终是字符串(或者,为了正确解释,总是强制为字符串),因此默认签名假定字符串[]
为默认类型,正如intellisense甚至建议的那样:
此外,您不能确保在运行时,这些键将是数字。定义严格定义对象具有数字键的类型在运行时无效,因此将值安全地强制转换为所需类型总是更安全:
const sizes: number[] = Object.keys(foo).map(Number);
此答案中提供了更详细的解释(请检查问题以了解更多上下文):
const sizes: number[] = Object.keys(foo).map(Number);
const sizes: number[] = Object.keys(foo).map(Number); // beware of possible NaN here.