如何为一个键创建具有唯一属性的数组的 typescript 类型?

vwoqyblh  于 2023-02-05  发布在  TypeScript
关注(0)|答案(2)|浏览(127)

我可以创建一个类型,它只允许对象在键中具有唯一值的数组。
所以这是可以的:

[{ a: 1 }, { a: 2 }, { a: 3 }] // ✅
[{ a: true }, { a: "nice" }, { a: 3 }] // ✅

这是不允许的:

[{ a: 1 }, { a: 1 }, { a: 3 }] // ❌ Duplicated 1
[{ a: true }, { a: "nice" }, { a: true }] // ❌ Duplicated true
aiazj4mn

aiazj4mn1#

不可以,不能通过创建自定义类型在TypeScript中强制实施此类限制。TypeScript仅在编译时提供类型检查,而不执行基于值的检查。您必须自己在代码中实现此类验证逻辑。

oogrdqng

oogrdqng2#

在我早期的Typescript中,我经常遇到这个问题。我想你可能会对Maps感兴趣。同时记住,这是TypeScript,与Javascript相比,“type”是非常重要的。我在你的示例中没有看到类型,所以我不清楚你想要什么。下面是一个使用Maps的示例,可能会对你有所帮助或给予你一些想法。当然,你也可以为此创建自己的类。这将允许你想要的任何东西。并通过提供类型来利用Typescript。一开始很烦人,但真的很有帮助。

class MyObject {
  a: number
}
let myArray:MyObject[] = []

let a = new Map()
a.set('1',true)
a.set('2',true)
a.set('3',true)
a.set('1',true)

a.forEach( (value,key) => {
  let obj = new MyObject()
  obj.a = value
  myArray.push(obj)
})

console.log(myArray)

它将显示:

(3) [MyObject {...}, MyObject {...}, MyO...]
0: MyObject {a: "1"}
1: MyObject {a: "2"}
2: MyObject {a: "3"}

相关问题