typescript - De ce constrângerea generică pentru proprietăți eșuează cu interfața, dar nu cu tipul
Uită-te la acest fragment:
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?
loc de joacă
Știu că constrângerea ar putea fi exprimată diferit pentru a evita eroarea, de exemplu,
type Constrained<T extends { [K in keyof T]: string }> = T;
și soluții precum aceasta pot fi găsite aici sau aici.
Întrebarea principală este: de ce interface eșuează, dar type nu?
Presupun că este pentru că interfețele sunt deschise (ele pot fi extinse/fuzionate).
Deoarece mesajul de eroare este ceva de genul
Semnătura indexului lipsește în tipul 'B'.
Cred că acest PR este relevant. În acest caz, apare o altă întrebare:
Este un tip declarat cu type reprezentarea unui tip literal de obiect?