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

Relaterade artiklar