我有以下类型声明:
type Root = { r: string };
type A = { a: string };
type B = { b: string };
type Main = Root & (A | B);
由于Main等效于{r: string, a: string} | {r: string, b: string},因此有效:
const main: Main = {
r: 'r',
a: 'a'
}
这里没有惊喜。但是,这会引发以下错误:
const func : (main: Main) => void = main => {
main.a
/* ^
* [TS2339]
* Property 'a' doesn't exist on type 'Main'.
* Property 'a' doesn't exist on type 'Root & B' */
}
我明白那.a不存在于 上Root & B,但它存在于 上Root & A,所以它必须存在于(Root & A) | (Root & B)等于 的上Main,对吧?
这是一个错误,还是我错过了什么?