网站搜索

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 等)。