首页 > 解决方案 > TypeScript:省略只读对象文字

问题描述

我需要确保的值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';

标签: javascriptreactjstypescriptobjectobject-literal

解决方案


Omit<T, K>用于对象/记录和属性,您正在寻找Exclude<T, U>哪些适用于工会:

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

操场

或者,将 应用于Omit记录类型,然后应用于keyof结果:

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

推荐阅读