typescript - 告诉 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 在尝试跟踪多个变量的类型以及每个变量如何依赖于另一个变量时遇到了困难。适合您的确切解决方案可能取决于您如何使用这两个变量。
但是鉴于您发布的内容,我可能会将它们组合成一个值,然后测试该值。
例如:
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
}
推荐阅读
- node.js - 如何有效地将 Postgres 数据从 Query 传输到 S3
- java - 启动时引发 Apache Tomcat 9 openSSL 错误
- sql-server - SQL IF 语句语法错误:语句中的 END 错误
- sql - SQL UPDATE - 如何使用另一个表更新一个表中的列?
- python - 为`traceback.format_exc()`构建快捷方式
- python - 如何在 discord.py 中查找具有特定角色的用户
- python - Pytest 基于 pytest 命令行参数运行“设置”方法
- python - Selenium chromedriver如何在无头模式下禁用翻译栏
- python - 如何使用多处理在一个 tkinter 窗口中创建两个计时器?
- regex - 从一场比赛中创建 2 个捕获组