我在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)
。这可能就是为什么我无法将回报转换为真实类型。
此外,如果我使用以下类型takeId
投射(A => string) | (B => number)
,代码仍然没有进行类型检查;
如何使用Flow返回多态函数类型检查,而不会失去安全性(例如,没有any
)?
如果不可能,那么实现相同结果的因果方式是什么(分解takeId
)?
由于
答案 0 :(得分:0)
您的示例中的问题是Flow无法优化返回类型,因为它不知道输出类型如何与输入类型相关联。 你可以做类似的事情来表达这种关系:
<Style x:Key="SelectButton" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Content">
<Setter.Value>
<Image Source="\directory"/>
</Setter.Value>
</Setter>
<Setter Property="Margin">
<Setter.Value>
<Thickness Bottom="10" Right="10" Top="10" Left="10"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source ="\directory"/>
</Setter.Value>
</Setter>
<Setter Property="Margin">
<Setter.Value>
<Thickness Bottom="0" Right="0" Top="0" Left="0"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
希望有所帮助