TypeScript中字符串字面量类型如何去重?

type A = 'a' | 'b'
type B = 'b' | 'c' | A

type C = {
  [key in A]: string
}
type D = {
  [key in B]: string
}
const obj: C = {
  a: 'a',
  b: 'b'
}
// 我想这样该怎么做
const obj1: D = {
  a: 'a', // 多次指定了 "a",因此将重写此用法。
  b: 'b', // 多次指定了 "b",因此将重写此用法。
  ...obj
}
阅读 3.6k
1 个回答

因为 C 的两个属性都没有使用 ? 来声明属性,所以这两个属性是一定存在的,这就造成了 obj1 声明的时候出现的那个问题,因为你要用 ...obj1 来覆盖属性,那前面的 ab 根本就不需要手工填写。

假如这样写就不会有问题

传送门:TypeScript: TS Playground

const objx = {
  a: 'a',
  b: 'b'
}

const obj1: D = {
  c: "",   // 没得 c 也会报错
  ...objx,
  ...obj
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进