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
