Przejdź do treści

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