【发布时间】:2018-10-31 00:23:00
【问题描述】:
我在 Flow 中遇到了多态函数的问题。
type A = { id: string };
type B = { id: number };
function takeId(x) {
return x.id;
}
const a: A = { id: 'akn2' };
const b: B = { id: 14 };
(takeId(a) : string);
// Error
(takeId(b) : number);
// Error
我了解流引擎会根据上下文以及它们被调用的位置键入多态函数。
在这种情况下,我认为takeId 将具有以下类型:(A|B) => (string | number)。这可能就是我不能将 return 转换为真实类型的原因。
此外,如果我将takeId 转换为以下类型(A => string) | (B => number),代码仍然不会进行类型检查;
如何使用 Flow 进行多态函数类型检查的返回,而不会失去安全性(例如没有 any)?
如果不可能,实现相同结果的惯用方式是什么(分解takeId)?
谢谢
【问题讨论】:
标签: javascript flowtype