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.