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.2k
1 个回答

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

假如这样写就不会有问题

传送门:TypeScript: TS Playground

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

const obj1: D = {
  c: "",   // 没得 c 也会报错
  ...objx,
  ...obj
}
logo
Microsoft
子站问答
访问
宣传栏