[英]Avoid implicit 'any' type when using Object.keys in Typescript
[英]Object.keys using numbers in typescript
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[]
为什么Typescript假定为string[]
? 在这里创建数字数组的正确方法是什么?
对象属性名称始终是字符串,如果您想将属性名称即时转换为数字,则可以使用map(Number)
:
const sizes: number[] = Object.keys(foo).map(Number);
请注意,因为如果您的属性名称不能转换为数字,则尺寸数组中将显示NaN
所有键都是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 };
Object.keys
总是返回一个字符串数组:
const obj = { prop: 'prop' }; console.log(typeof Object.keys(obj)[0]);
键始终是字符串,甚至是数组和Foo
对象之类的数字键-如果您使用数字键而不是字符串键,它将自动强制为字符串。
我会改用[key: string]
,因为那是内部键的类型。
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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.