typescript - null | number 不能赋值给 number(即使确保它不可能为 null)
我以前从未使用过 Typescript,在看了一些简短的教程后,我开始转换一个应用程序。大多数情况下都很顺利,但在某些情况下,我感觉 TS 无法理解代码。这是最新的情况,我实在无法理解:
interface APIresponse { someProp: number | null }
interface parsedAPIresponse { someProp: number }
let apiResponse: APIresponse = { someProp: null }
function parseAPIresponse(response: APIresponse): parsedAPIresponse {
response.someProp = 1
return response
}
...并且 TS 报告返回值不兼容,number|null 不能赋值给 number,即使已经将值 1 赋给它。
我正在尝试做的是解析 API 的响应。API 返回的是数字或 null,我对此无能为力,但我在应用中避免使用 null,所以我尝试解析 API 响应并转换 null。
不确定如何编写这个,并且在应用的 API 层之后完全避免空值。
答案#1
这个可以工作(例如在 TS playground 中查看):
function parseAPIresponse(response: APIresponse): parsedAPIresponse {
let parsedResponse: parsedAPIresponse = {
someProp: response.someProp || 0,
};
return parsedResponse;
}
在这个例子中,我们创建了一个正确返回类型的新对象,并返回它,这样 TypeScript 就能理解这是预期的正确返回类型。
为了确保 number 字段确实不是 null,我这里选择使用默认值 0,当然也可能有其他方法(如果值不是数字,你可以抛出异常,或者使用其他默认值,比如 NaN 等)。
