typescript - Hvorfor generics begrensning for egenskaper feiler med interface men ikke med type
Se på dette utdraget:
type Constrained<T extends { [K in string]: string }> = T;
type A = {
p: string;
}
interface B {
p: string;
}
type R1 = Constrained<A>; // Why this is OK...
type R2 = Constrained<B>; // ... and this an Error?
lekeplass
Jeg vet at begrensningen kunne uttrykkes annerledes for å unngå feilen, for eksempel,
type Constrained<T extends { [K in keyof T]: string }> = T;
og løsninger som dette kan finnes her eller her.
Hovedspørsmålet er: hvorfor interface mislykkes, men type ikke gjør det?
Mitt gjetning er fordi interfaces er åpne (de kan utvides/slås sammen).
Siden feilmeldingen er noe som
Indeks-signatur mangler i typen 'B'.
Jeg tror denne PRen er relevant. I så fall oppstår et annet spørsmål:
Er en type erklært med type representasjonen av en objektliteraltype?