如何解决错误 TS2532:对象可能是“未定义”

时间:2021-07-28 12:09:25

标签: typescript

我有代码,我应该多次检查复杂的条件。 F.E:nil 等。我尝试在我的条件下添加变量,例如 AVCapturePhoto,但我遇到了无法解决的 TS 问题。

示例作品:

(a && b) || c

不起作用:

const hasSomething = (a && b) || c

是否有任何解决方法可以在没有非空断言 function add(a?: number, b?: number): number { if (a && b) { return a + b; } return 0; } 的情况下修复它?

2 个答案:

答案 0 :(得分:1)

易于修复:D。只需将 TypeScript 的版本更新为 4.4:

function add(a?: number, b?: number): number {
    const hasNumbers = a && b;
    if (hasNumbers) {
        return a + b;
    }
    return 0;
}

Playground

答案 1 :(得分:1)

带有数字的 && (and) 运算符无法按预期工作:

如果你这样使用它:

const foo = 3 && 4

您可以看到 typeof foo"number"

实际上 && 运算符返回:

  • 如果结果为真,最后一个数字,例如:5 && 4true 所以它会返回 4

  • 假值只有一个:例如 0 && 40 作为假值,将返回 0,与 undefined && 4 相同,这将返回 {{ 1}}

低于 undefined 的 TypeScript 版本将无法真正理解哪个是真正的结果,因为它可能是 4.4.0 AFAIK。

当两个值中的至少一个可以是 undefined 时,使用 number && number 也是一种不好的做法,因为 0 是一个假值,并且在您的函数中任何根据 0 检查,其中包含 0 的 sum 将导致 0 响应。

我建议您只将函数参数设为强制性,以避免错误并避免 a && b 检查:

hasNumbers