首页 > 解决方案 > 告诉 ts 将存在两个变量之一

问题描述

考虑以下代码:

const var1: Record<string, unknown> | undefined = undefined;
const var2: string | undefined = "Hi";

if(!var1 && !var2) /* THROW ERROR */

const obj: string | Record<string, unknown> = var1 | var2 /* TS ERROR */

在 if 语句之后打字稿知道至少存在一个变量,但它不能确定存在哪个变量,因此它抛出以下错误是有道理的。

TS 错误:

类型“未定义”不可分配给类型“字符串 | 记录<字符串,未知>'。

我试图避免在变量赋值中使用额外的 if 语句。

在这个逻辑中我缺少什么吗?

标签: typescript

解决方案


Typescript 在尝试跟踪多个变量的类型以及每个变量如何依赖于另一个变量时遇到了困难。适合您的确切解决方案可能取决于您如何使用这两个变量。

但是鉴于您发布的内容,我可能会将它们组合成一个值,然后测试该值。

例如:

const var1: Record<string, unknown> | undefined = undefined;
const var2: string | undefined = "Hi";

function foo() {
    const obj: string | Record<string, unknown> | undefined = var1 || var2
    if(!obj) throw new Error("foo")
    // obj exists here
}

游乐场链接


推荐阅读