Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Wzorce

    Jak powstrzymać Omit<User, "nmae"> przed cichym sukcesem, który nic nie usuwa?

    Wbudowany ogranicza parametr klucza do keyof any, czyli do każdego klucza, jaki mógłby istnieć. Ogranicz go zamiast tego do keyof T.

    Przepis

    type StrictOmit<T, K extends keyof T> = Omit<T, K>
    
    type User = { id: number; name: string; email: string }
    
    type WithoutEmail = StrictOmit<User, 'email'>

    Build to kompiluje i sprawdza każdy wynik poniżej.

    Jak to działa

    1. 01
      type StrictOmit<T, K extends keyof T> = Omit<T, K>

      Cały przepis. Ciało wciąż deleguje do wbudowanego — węższe są tylko drzwi, a to w drzwiach był błąd.

    Co dostajesz

    Gdzie to zawodzi

    Jest surowszy od wbudowanego w sposób, który czasem gryzie: Omit jest celowo pobłażliwy, by dało się go użyć na uniach i na typach o jeszcze nieznanych kluczach. Globalna podmiana ujawni realny kod, który na tym polegał.

    Wniosek

    Jedna linia, a usuwa całą klasę cichych błędów. Umieść ją w tym samym pliku co inne wspólne typy i już nigdy nie pisz gołego Omit.

    Zobacz też

    Wzorce