javascript - TypeScript-fel: "Typ 'number' kan inte tilldelas typen '0 | 1 | 2'". Varför får jag det här felet?
Jag får ett konstigt TypeScript-fel.
Jag har följande exempel:
interface Foo {
prop: 0 | 1 | 2;
}
class Bar implements Foo {
prop = 1;
}
Och jag får felet:
src/example.ts:6:3 - error TS2416: Property 'prop' in type 'Bar' is not assignable to the same property in base type 'Foo'.
Type 'number' is not assignable to type '0 | 1 | 2'.
6 prop = 1;
~~~~
Varför ger den här koden ett fel?
Svar #1
Redigera :
Du kan nu också göra följande (readonly, as const) om det passar ditt användningsfall:
class Bar implements Foo {
readonly prop = 1;
}
eller
class Bar implements Foo {
prop = 1 as const;
}
====
I din klass antas 1 vara den utvidgade number-typen eftersom det skulle vara konstigt att anta att en muterbar identifierare bara kan ta det exakta initialvärdet. I ditt gränssnitt antar du inte typen, du anger den uttryckligen (oundvikligen).
Försök att göra en typomvandling prop=1 as 1 eller annotera prop : 1 | 2 | 3=1 eller skapa type oneThroughThree=1 | 2 | 3; och använd det aliaset för att annotera båda platserna. Ännu bättre, använd ett numeriskt enum för att täcka ditt intervall av godkända värden och kanske göra det mer läsbart.
Svar #2
Eftersom du har tilldelat prop att vara antingen typen '0', '1' eller '2' istället för att vara möjliga värden 0, 1 och 2
Det korrekta sättet är att skapa en enum-typvariabel med möjliga värden 0, 1 och 2 (t.ex. enumvärden) och tilldela prop för att anta enum-typvärdena (t.ex. prop: värden)
https://www.typescriptlang.org/docs/handbook/enums.html
