【发布时间】:2016-12-17 22:20:13
【问题描述】:
这是关于流类型检查声明,当一个函数类型被定义并且我们试图类型检查的函数表达式具有:(a) 比定义的类型更多或 (b) 更少的参数。
下面的类型检查是应该的,这里没有问题。
declare type TFunctionNumberToBoolean = (n: number) => boolean;
const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;}
以下情况(case A),其中规范的“数字转布尔”函数类型更改如下:
(n: number) => 布尔值
... 不进行类型检查:
declare type TFunctionNumberToBoolean = () => boolean;
const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;}
以下情况(case B),其中规范的“数字转布尔”函数类型更改如下:
(n: number, foo :number) => 布尔值
…类型检查:
declare type TFunctionNumberToBoolean = (n: number, foo: number) => boolean;
const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;}
Case A(比定义的函数类型更多的参数)不是类型检查而是 Case B(比定义的函数类型更少的参数)类型检查背后的原因是什么?我天真地认为,可以为相反的行为更直观地提出论据。
我正在使用 Flow 0.35。
【问题讨论】:
-
澄清您的示例可能会很好,因为我花了一分钟才意识到您在传递带有一个参数的函数时询问的是零参数与两个参数的情况。
标签: flowtype