Javascript ObjMap返回值或函数

Javascript ObjMap返回值或函数,javascript,flowtype,Javascript,Flowtype,我不明白这为什么不起作用。我希望$ObjMap要求对象返回值,或者要求函数返回该值。请参阅代码中的注释。有人知道怎么做吗 类型TObj={| a:号码, b:绳子, c:布尔型, |}; 类型摘录=(V)=>(()=>V)| V 类型TType=$ObjMap 函数a():字符串{ 返回“a”; } //预期a会有错误,因为它是一个返回字符串的函数。 //$ObjMap声明它必须是一个数字或返回的函数 //一个数字。 常数t:t类型={ A. b:‘v’, c:是的, }; 在我看来,这似乎是

我不明白这为什么不起作用。我希望$ObjMap要求对象返回值,或者要求函数返回该值。请参阅代码中的注释。有人知道怎么做吗

类型TObj={|
a:号码,
b:绳子,
c:布尔型,
|};
类型摘录=(V)=>(()=>V)| V
类型TType=$ObjMap
函数a():字符串{
返回“a”;
}
//预期a会有错误,因为它是一个返回字符串的函数。
//$ObjMap声明它必须是一个数字或返回的函数
//一个数字。
常数t:t类型={
A.
b:‘v’,
c:是的,
};

在我看来,这似乎是实现中的一个限制/缺陷。原因如下:

如果我们更改
Extract
,使其只需要原语,那么我们将通过观察一切都按预期工作来建立基线

type Extract = <V>(V) => V
接下来,我们修改
Extract
,只接受返回类型为number或相应期望值的函数

type Extract = <V>(V) => ((() => number) | V)
但是,如果我们将接受的类型从
number
更改为
string
,错误就会消失,这意味着到目前为止一切正常

最后,当我们用
V
替换
number
时,错误消失。这使我认为解释器在解决问题时遇到了问题,并将返回到默认的
any

我认为静态分析会出现这样的问题,称之为静态是有原因的


免责声明:我上面所说的一切都是想法和假设,我只是想帮你,可能完全是垃圾,在这种情况下,我道歉。

我认为你是对的。我在flow repo中提交了一个bug。@pizzarob我的一般假设是,因为这发生在vscode的intelliSense中-每当在键入时出现错误,它就会返回到
any
,这是同样的工作方式。很可能
V
不是您所认为的提供的可调用类型,它可能没有定义。因此,我认为值得注意的是,可能存在某种特殊语法,允许您将
V
导入到可调用类型中,但我不熟悉flow。
type Extract = <V>(V) => ((() => number) | V)
19:   a: a,
         ^ Cannot assign object literal to `t` because string [1] is incompatible with number [2] in the return value of property `a`. [incompatible-type]
    References:
    11: function a (): string {
                       ^ [1]
    7: type Extract = <V>(V) => ((() => number) | V)
                                        ^ [2]