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

作者站长头像
站长
· 阅读数 20
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
}
回复
1个回答
avatar
test
2024-07-12

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

假如这样写就不会有问题

传送门:TypeScript: TS Playground

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

const obj1: D = {
  c: "",   // 没得 c 也会报错
  ...objx,
  ...obj
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容