Przejdź do treści
TS2312

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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

    1. 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.

    2. 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.

    Dokąd dalej

    Błędy