Przejdź do treści
webtype.orgSpraw, by Omit łapał literówki

    ↑↓ 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