typescript 为什么我不能示例化两个Record类型的交集?

fivyi3re  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(98)

为什么不可能给Record<string, A> & Record<string, B>赋值,即使可以给Record<string, A & B>赋值,换句话说,这两个不是等价的吗?

type A = { a: string };
type B = { b: string };

// this compiles
const x: Record<string, A & B> = {
    foo: { a: '', b: '' },
};

// this doesn't
const y: Record<string, A> & Record<string, B> = {
    foo: { a: '', b: '' },
    //            ^^^^^
    // Object literal may only specify known properties, and 'b' does not exist in type 'A'.(2322)
};

https://www.typescriptlang.org/play?#code/C4TwDgpgBAglC8UDeUCGAuKBnYAnAlgHYDmUAvgNwBQokUASnIvRAMYD2uAJgDw4EkANLAB81GuGgAhBMigAjTPyKlKEuvRnM2nXsqFQpYqlQ6EcUAB6YWHbnzwrhcAGSGRspFSg+oAM3Z2TBQMKAByMOFFcLDyQSo1U3ZzYCgQG1cGLWRvXwCguVCIqMwIuITqIA

6l7fqoea

6l7fqoea1#

这被认为是TypeScript中的一个错误;请参阅microsoft/TypeScript#51875(我提交了它,因为这个堆栈溢出问题)。看起来microsoft/TypeScript#49503是与TypeScript 4.8一起发布的,它引入了这个问题,作为对另一个bug的修复的副作用。
目前这个问题是在backlog上,这意味着它不会在任何即将发布的版本中被修复。但是它也被标记为Help Wanted,这意味着来自社区的拉取请求是受欢迎的。所以任何想看到这个bug尽快修复的读者可能想自己提交一个修复。

相关问题