我举了个例子
/* @flow */ class Foo {} class Bar {} declare var f: ((x: Foo) => void) & ((x: Bar) => void); f(new Foo());
来自文档页面https://flowtype.org/docs/union-intersection-types.html#_
此代码类型检查没有错误.
对我来说,结果并不是很明显.
因为它们显示在页面顶部附近的另一个例子:
/* @flow */ type I = {a: number} & {b: number}; var x: I = {a: 1, b: 2}; x = {a: 1, b: 2, c: "three"};
交集(从术语语义本身流出)是2(或更多)类型的复合.基本上AND
就是那些.
那么,为什么f(new Foo());
类型检查不会失败呢?这个new Foo()
论点显然不是一个实例,Bar
所以不能通过.
我错过了什么?
UPD
经过一些更多的研究后,我发现使用时的意义|
和&
交换declare var
(对比type
或就地输入).我找不到解释为什么它甚至发生在第一个地方.