javascript - Typescript-fel på unionstyp i generisk typ: 'är inte tilldelningsbar till typ'
Jag har en abstrakt klass med en generisk som jag implementerar med en unionstyp såsom:
export abstract class DAO<T> {
async getDocument(ref: string): Promise<T> {
// irrelevant code that return T asynchronously
}
}
export class ConfigurationDAO extends DAO<ConfigurationType> {
//...
}
export type ConfigurationType = 'advertising' | 'theming';
Signaturen getDocument() för klassen ConfigurationDAO är då :
async getDocument(ref: string): Promise<ConfigurationType>
Problemet är att när jag kallar på den här funktionen får jag ett fel:
const advertisingDocument: 'advertising' = await this.getDocument('advertising');
felet :
Type 'ConfigurationType' is not assignable to type '"advertising"'.
Type '"theming"' is not assignable to type '"advertising"'
Jag förstår inte varför typen 'advertising' inte är giltig när returtypen är 'advertising' | 'theming'
Svar #1
Typescript typiserar automatiskt ditt advertisingDocument som ConfigurationType och du försöker tvinga det till en annan typ.
Tänk på det som om det var grundläggande typer.
För Typescript gör du i princip samma sak som:
const test: number = 'name';
Eftersom 'name' är en sträng kan det inte tilldelas test som jag deklarerade som en number.
Hoppas det hjälpte.
