type Foo = { [key: number]: string }
const foo: Foo = { 100: 'foo', 200: 'bar' }
const sizes: number[] = Object.keys(foo)
给我:
Type 'string[]' is not assignable to type 'number[]
为什么打字稿采用string[]
?在这里创建数字数组的正确方法是什么?
答案 0 :(得分:3)
对象属性名称始终是字符串,如果您想将属性名称转换为数字,可以使用map(Number)
:
const sizes: number[] = Object.keys(foo).map(Number);
请注意,因为如果您的属性名称不能转换为数字,则会在您的尺寸数组中得到NaN
答案 1 :(得分:2)
所有键都是JavaScript中的字符串-只需使用map
:
const sizes: number[] = Object.keys(foo).map(Number);
这仅适用于数字字符串-例如,如果它是包含小数的欧洲字符串,则将是NaN
,并且永远都不能很好地结束。
console.log(Number("10,7"));
或更改您的两种类型:
const sizes: string[] = Object.keys(foo);
或者:
type Foo = { [key: string]: string };
答案 2 :(得分:0)
Object.keys
总是返回 strings 的数组:
const obj = { prop: 'prop' };
console.log(typeof Object.keys(obj)[0]);
键始终是字符串,甚至是数组和Foo
对象中的数字键-如果您使用数字键而不是字符串键,它将自动强制为字符串。
我会改用[key: string]
,因为这是内部键的类型。
答案 3 :(得分:0)
Javascript对象没有数字键!所有键都是字符串。始终。如果要将其他内容映射到值,则应使用map
。
var numObj = { 1:'one', 2:'two' };
var numObjKey = Object.keys(numObj);
console.log(typeof numObjKey[0]);
console.log(typeof numObjKey.map(Number)[0]);
答案 4 :(得分:0)