javascript - Object.keys använder siffror i typescript


type Foo = { [key: number]: string }

const foo: Foo = { 100: 'foo', 200: 'bar' }
const sizes: number[] = Object.keys(foo)

Ger mig:

Type 'string[]' is not assignable to type 'number[]

Varför antar Typescript string[]? Och vad är det korrekta sättet att skapa en matris av nummer här?

Svar #1

Alla nycklar är strängar i JavaScript - använd bara map:

const sizes: number[] = Object.keys(foo).map(Number);

Detta kommer bara att fungera för numeriska strängar - om det är en europeisk sträng som innehåller decimaltal, till exempel, kommer det att vara NaN, och det slutar aldrig bra.

console.log(Number("10,7"));

Eller ändra någon av dina typer:

const sizes: string[] = Object.keys(foo);

Eller :

type Foo = { [key: string]: string };

Svar #2

Objektegenskapsnamn är alltid strängar, om du vill konvertera egenskapsnamn till nummer direkt kan du använda map(Number):

const sizes: number[] = Object.keys(foo).map(Number);

Var uppmärksam eftersom, om ditt egenskapsnamn inte kan omvandlas till ett nummer, kommer du få NaN i din storleksarray

Relaterade artiklar