【问题标题】:TypeScript: Omit readonly object literalTypeScript:省略只读对象文字
【发布时间】:2021-01-18 11:57:07
【问题描述】:

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

【问题讨论】:

  • 请不要对每个问题提出多个问题,发布一个新问题(如果相关,请提供指向该问题的链接):)
  • 当然,明白了:)

标签: javascript reactjs typescript object object-literal


【解决方案1】:

Omit&lt;T, K&gt; 用于对象/记录和属性,您正在寻找适用于联合的Exclude&lt;T, U&gt;

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

Playground

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

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

【讨论】:

  • typeof FOO 是记录类型(或对象类型),keyof typeof FOO 是所有键的联合类型,这就是 keyof 运算符的作用。 keyof typeof FOO'a' | 'b' | 'c',文字类型 'a''b''c' 之间的联合。
  • 知道了。如果我尝试 ExcludeExtract 一个甚至不存在于联合中的键,为什么 TS 不会抛出错误,例如Exclude&lt;keyof typeof FOO, 'd'&gt;?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多