typescript - Omit<keyof typeof SomeObject, "omittedKey"> inkluderar Array-prototypens nycklar


I Redux Toolkit har jag en slice som mest består av sträng-arrayer, och jag vill ha en åtgärd som lägger till en sträng i en av arrayerna. Åtgärden ska ta nyckeln till arrayen som ska läggas till, samt strängen som ska läggas till.

Här är hur jag har skrivit det:

const initialState = {
  gameModes: [] as string[],
  contestTypes: [] as string[],
  entryFee: {
    max: 10000,
    min: 0,
  },
  entryTypes: [] as string[],
  advancedFilters: [] as string[],
};

type ContestFilterSliceType = typeof initialState;
type ContestFilterKey = keyof ContestFilterKey;

const contestFilterSlice = createSlice({
  name: "constestFilter",
  initialState,
  reducers: {
    addFilter(
      state,
      action: PayloadAction<{ key: Omit<ContestFilterKey, "entryFee">; filter: string }>
    ) {
      const { filter, key } = action.payload;
      state[key].push(filter);
    },
  },
});

När jag hovrar över type ContestFilterKey=keyof ContestFilterKey;, ser jag att typen, korrekt, är en lista över nycklarna i initialState.

Men när jag hovrar över key: Omit<ContestFilterKey, "entryFee">, får jag detta:

nyckel: Välj<"gameModes" | "contestTypes" | "entryFee" | "entryTypes" | "advancedFilters", number | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | ... 40 till ... | "replaceAll">

Det verkar som att den senare inkluderar en hel massa prototypmetoder. Av Array? Av Object? Oklart.

Jag skulle förvänta mig att Omit<ContestFilterKey, "entryFee"> helt enkelt är: "gameModes" | "contestTypes" | "entryTypes" | "advancedFilters"

Vad missar jag här?

Svar #1

Okej, en snabb RTFM visade att den verktygstyp jag letade efter inte var Omit, utan Exclude.

Lämnar detta här för nästa dumbom som gör detta misstag.