当前位置:  开发笔记 > 编程语言 > 正文

为什么函数的交集类型接受任何类型的声明而不是两者都接受?

如何解决《为什么函数的交集类型接受任何类型的声明而不是两者都接受?》经验,为你挑选了0个好方法。

我举了个例子

/* @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或就地输入).我找不到解释为什么它甚至发生在第一个地方.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有