Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Kształty obiektów

    Omit

    Usuwa wymienione klucze — i w odróżnieniu od Pick nie dba o to, czy w ogóle istniały.

    Czym jest

    Nie jest prymitywem: Omit to Pick<T, Exclude<keyof T, K>>, co definicja obok pokazuje wprost. Ograniczeniem jest keyof any, a nie keyof T, i ta jedna różnica odpowiada za większość błędów z udziałem tego typu.

    Przykłady

    • Omit<{ a: string; b: number }, 'b'>
      →{ a: string; }
    • Omit<{ a: string }, 'typo'>
      →{ a: string; }

      Żadnego błędu, żadnego skutku. Źle wpisany klucz po cichu nic nie usuwa, a typ nadal wygląda dobrze.

    • Omit<{ a: string; b: number; c: boolean }, 'a' | 'b'>
      →{ c: boolean; }

    Każdy rozwinięty typ powyżej wypisał TypeScript 6.0.3, nie ręka człowieka.

    Czego nie robi

    • Nie sprawdza przekazywanych kluczy. Omit<User, "nmae"> kompiluje się, nic nie usuwa i jest najczęstszym cichym błędem w bazach kodu TypeScriptu.
    • Nie dystrybuuje się po uniach, więc usuwanie z A | B najpierw zapada się do wspólnych kluczy, a dopiero potem cokolwiek usuwa.

    Wniosek

    Jeśli chcesz łapać literówki, napisz własne: type StrictOmit<T, K extends keyof T> = Omit<T, K>. Całą naprawą jest ograniczenie.