TypeScript:省略只读对象文字

TypeScript: Omit readonly object literal

我需要确保 bar 的值必须是只读对象 FOO 的键,除了键 c.

代码

const FOO = {
  a: {
    // key-value pairs
  },
  b: {
    // key-value pairs
  },
  c: {
    // key-value pairs
  },
} as const;

// all of the keys are assignable
const allKeys: keyof typeof FOO = 'a';

// tried this but TypeScript doesn’t throw error
const bar: Omit<keyof typeof FOO, 'c'> = 'c';

Omit<T, K> 适用于 objects/records 和属性,您正在寻找适用于工会的 Exclude<T, U>

const bar: Exclude<keyof typeof FOO, 'c'> = 'c'; // error

Playground

或者,对记录类型应用 Omit,然后对结果应用 keyof

const bar: keyof Omit<typeof FOO, 'c'> = 'c'; // error