gpt4 book ai didi

javascript - Flow 的 $ElementType 的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 01:41:12 24 4
gpt4 key购买 nike

我在 flow.org 中找到了下一个代码($ElementType 的最后一个示例):

function getProp<O: {+[string]: mixed}, P: $Keys<O>>(o: O, p: P): $ElementType<O, P> {
return o[p];
}
(getProp({a: 42}, 'a'): number); // OK

我将其更改为:

function getProp<O: {+[string]: mixed}, P: $Keys<O>>(o: O, p: P): $ElementType<O, P> {
return true; // no error?
}
(getProp({a: 42}, 'a'): number); // OK?

但是没有错误。

据我了解,type返回值是从 $ElementType<O, P> 推断出来的且不等于mixed类型,但不应该是 boolean也是。

请告诉我为什么返回值 true 的类型为 number在这种情况下。谢谢!

最佳答案

当对使用函数的代码进行类型检查时,Flow 将仅查看函数签名,而不查看函数体。尽管函数体始终返回 bool 值,但用法与签名相匹配,因此会按其应有的方式进行类型检查。

在函数内部,Flow 执行相反的操作。它只会根据签名对主体进行类型检查,而不会考虑函数的实际调用方式。在这种情况下,它不可能知道对于任何可能的键,O 的元素是什么类型。

它能做的最好的事情就是确保任何返回值的类型实际上是从您使用提供的键从中提取的值派生的,并使假定该类型完全出错。显然它没有这样做,这可能是 $ElementType 的限制。

$ElementType 周围有很多 Unresolved 问题,因此它看起来有点不稳定,但仍然可能值得 logging a bug report以防有所不同。

关于javascript - Flow 的 $ElementType 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52405090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com