TS2312
Interfejs nie może rozszerzać unii
An interface can only extend an object type or intersection of object types with statically known members.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Interfejs próbował dziedziczyć po unii, której składowe nie są znane jednocześnie.
Odtworzenie
type Choice = { a: 1 } | { b: 2 } interface Both extends Choice { c: 3 }
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
Dziedziczenie interfejsu scala określony zestaw składowych obiektu. Unia oznacza jedną gałąź albo drugą, więc nie istnieje pojedyncza lista składowych, którą deklaracja interfejsu mogłaby odziedziczyć i scalić.
Naprawy
- 01
type Choice = { a: 1 } | { b: 2 } type WithC = Choice & { c: 3 }
Użyj aliasu przecięcia, aby dodać składowe do każdej gałęzi unii.
- 02
interface Base { a: number } interface Extended extends Base { c: number }
Rozszerz interfejs lub typ obiektowy, gdy baza naprawdę ma stały kształt.
Wniosek
Interfejsy rozszerzają znane kształty obiektów. Do składania unii i przecięć używaj aliasów typów.
