Dav*_*ing 10 javascript arrays object typescript ecmascript-6
type Foo = { [key: number]: string }
const foo: Foo = { 100: 'foo', 200: 'bar' }
const sizes: number[] = Object.keys(foo)
Run Code Online (Sandbox Code Playgroud)
给我:
Type 'string[]' is not assignable to type 'number[]
为什么打字稿假设string[]
?在这里创建数字数组的正确方法是什么?
Jac*_*ord 14
JavaScript 中的所有键都是字符串 - 只需使用map
:
const sizes: number[] = Object.keys(foo).map(Number);
Run Code Online (Sandbox Code Playgroud)
这仅适用于数字字符串 - 例如,如果它是一个涉及小数的欧洲字符串,它将是NaN
,并且永远不会结束。
const sizes: number[] = Object.keys(foo).map(Number);
Run Code Online (Sandbox Code Playgroud)
或者更改您的任何一种类型:
const sizes: string[] = Object.keys(foo);
Run Code Online (Sandbox Code Playgroud)
或者:
type Foo = { [key: string]: string };
Run Code Online (Sandbox Code Playgroud)
为什么 Typescript 假定为 string[]?在这里创建数字数组的正确方法是什么?
因为对象属性名称始终是字符串(或者,为了正确解释这一点,总是强制为字符串),因此默认签名假定 astring[]
作为默认类型,正如智能感知甚至建议的那样:
此外,您无法确保在运行时这些键将是数字。定义严格定义该对象具有数字键的类型在运行时不会产生任何影响,因此将值安全地转换为所需类型总是更安全:
const sizes: number[] = Object.keys(foo).map(Number); // beware of possible NaN here.
Run Code Online (Sandbox Code Playgroud)
对象属性名称始终是字符串,如果要将属性名称动态转换为数字,可以使用map(Number)
:
const sizes: number[] = Object.keys(foo).map(Number);
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的属性名称不能转换为数字,您将进入NaN
size 数组
归档时间: |
|
查看次数: |
8912 次 |
最近记录: |