这里有三种简单的类型
type T1 =
| { letter: 'a'; valueFunc: (prop: number) => void; valueType: number }
| { letter: 'b'; valueFunc: (prop: string) => void; valueType: string }
type T2 = { base: 'low' }
type T3 = T1 & T2
和2个简单的定义
const var1: T3 = { letter: 'b', base: 'low', valueFunc: (prop) => {}, valueType: 'empty' }
const var2: T3 = { letter: 'a', base: 'low', valueFunc: (prop) => {}, valueType: 0 }
这完全符合预期.TS正确判断valueFunc
中prop
的类型.然而,如果我给T2
加上另一个类型的union,TS不再能够解析prop
,但它仍然可以解析valueType
.
修改类型
type T1 =
| { letter: 'a'; valueFunc: (prop: number) => void; valueType: number }
| { letter: 'b'; valueFunc: (prop: string) => void; valueType: string }
type T2 = { base: 'low' } | {noise: 'high'}
type T3 = T1 & T2
const var1: T3 = { letter: 'b', base: 'low', valueFunc: (prop) => {}, valueType: 'empty' }
const var2: T3 = { letter: 'a', noise: 'high', valueFunc: (prop) => {}, valueType: 0 }
为什么?我错过了什么?