我正在使用the following type definitions inside of Flow's try tool,使用嵌套在并集内的交集时,我会看到一些奇怪的行为。type Transition = SimpleTransition | BranchingTransition | LoopingTransition;type SimpleTransition = { type: 'transition', next?: string}type BranchingTransition = SimpleTransition & { branch: Branch[]}type LoopingTransition = SimpleTransition & { loop: Loop}type Branch = { to: string, when: string}type Loop = { limit: number}当我尝试创建一个Transition包含其中一个联合类型的属性不匹配的属性时,我期望看到类型错误。let t: Transition = { type: 'transition', branch: false // <- expecting type error (boolean != Branch[])}我希望包含branch属性将导致类型检查器对照BranchingTransition检查该对象(然后在boolean和Branch[]之间找到类型不匹配的内容,但它似乎仅算作,带有无关的属性。我想知道这是否仅仅是因为SimpleTransition是它能够统一的第一个联合类型,但是更改联合中类型的顺序似乎没有任何效果。有趣的是,当我从联合中删除SimpleTransition时,它可以正常工作(although the error message is somewhat confusing)。有没有一种方法可以构造这些类型,以防止发生此问题? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 流行为正确,因为({ type: 'transition', branch: false}: SimpleTransition)您可以使用$Exact类型来缩小类型(流0.32+)type Transition = $Exact<SimpleTransition> | BranchingTransition | LoopingTransition;或编写自己的等价内容(流程0.31-)type Strict<T> = $Shape<T> & T;type Transition = Strict<SimpleTransition> | BranchingTransition | LoopingTransition; (adsbygoogle = window.adsbygoogle || []).push({});
09-30 16:33
查看更多