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