javascript - Flowtype:如果类型没有匹配的字段,则不相交的联合区分不起作用
问题描述
我有一个函数应该根据该参数上是否存在字段来以不同的方式处理它作为参数接收的对象。
我创建了以下示例(自己尝试) - 它是流类型文档中关于分离联合类型的示例的改编:
// @flow
type Success = { value: boolean };
type Failed = { error: string };
type Response = Success | Failed;
function handleResponse(response: Response) {
if (response.value) {
var value = response.value;
} else {
var error = response.error; // Error!
}
}
我在表示的行中得到的错误是:
Cannot get `response.error` because property `error` is missing in `Success` [1].
不幸的是,我没有具有不同值的共享密钥,这可以帮助我区分Success
和Failed
对象。
或者有没有其他方法可以让它工作?
解决方案
您必须使用确切的类型。在下面关于具有精确类型的不相交联合部分中进一步说明。
必须添加确切的类型,|
并且 if/else 必须变成 if/else if。此代码现在不再抛出任何错误(尝试新代码):
// @flow
type Success = {| value: boolean |};
type Failed = {| error: string |};
type Response = Success | Failed;
function handleResponse(response: Response) {
if (response.value) {
var value: boolean = response.value;
} else if (response.error) {
var error: string = response.error; // Error!
}
}
感谢@user11307804 向我指出这个答案!
推荐阅读
- c# - 复杂类型和等效类型之间的 AutoMapper Generic Cast
- android - Flutter:如何更新 CSV 单元格?
- amazon-web-services - 从 serverless.yml 创建时,Aurora Serverless 数据库集群未显示在 LocalStack 上
- python - 如何在python中拆分数字输入?
- python - 为 ConvLSTM2d 准备网格天气数据
- c# - “没有这样的主机名是已知的。” 在 foreach 循环中从 Asp.NET 调用外部 API 不是在调试模式下,而是在运行模式下抛出错误
- python - 找到最大分数的索引并使用该索引找到相应的总分并计算平均值?
- ios - AVCaptureMetadataOutput 类中的 AvailableMetadataObjectTypes 方法看起来好像被错误地声明了
- elixir - 将字符串拆分为多个块,每个块不超过100个字符,并且拆分不能在数字中间
- javascript - 过滤弹出菜单