Utöka 'generisk' TypeScript-gränssnitt
Med tanke på följande TS-definition:
type GenericPropsWithChildren<T> = T & { children?: ReactNode };
Inget fel med type men jag undrar om det finns en interface-motsvarighet? Självklart är det möjligt att skicka generiska ner i gränssnitt men det är inte vad jag är ute efter, t.ex.:
interface GenericPropsWithChildren<T> {
children?: ReactNode;
myProps: T; // not desired
}
Exemplen här är i ett sammanhang av React-kod men det underliggande problemet är grundläggande TS.
Svar #1
Medlemmarna i ett gränssnitt måste vara kända vid deklaration, och att använda en generisk typparameter i extends bryter mot denna regel. Så det finns inget sätt att skapa ett motsvarande generiskt gränssnitt.
Om du redan känner till typparametern kan du faktiskt ärva en typalias i ett gränssnitt. Så länge alla medlemmar är kända vid deklarationen är det tillåtet :
import { ReactNode } from 'react'
type GenericPropsWithChildren<T> = T & { children?: ReactNode };
interface Concrete extends GenericPropsWithChildren<{ p: string }> {
}
Lekplatslänk
