首页 > 解决方案 > 在打字稿中使用联合类型时出现不确定的错误消息

问题描述

我正在尝试描述 Firestore 值的联合类型:

interface StringValue {
    stringValue: string;
}

interface BooleanValue {
    booleanValue: boolean;
}

type ValueType = StringValue | BooleanValue;
var value: ValueType = { booleanValue: false, stringValue: "null" }; // [1]

if (value.booleanValue) console.log(value); // [2]

我在 [2] 处遇到错误:

Property 'booleanValue' does not exist on type 'ValueType'.
  Property 'booleanValue' does not exist on type 'StringValue'.(2339)

虽然我希望在 [1] 行出错,但错误的分配发生在哪里。那么,为什么是 [2] 而不是 [1]?

https://www.typescriptlang.org/play/index.html?ssl=1&ssc=1&pln=13&pc=1#code/JYOwLgpgTgZghgYwgAgMpiqA5gNTgGwFcUBvAWAChlrkBnDbPIiALjoZCwG5KBfSyqEixEKAEIB7CfghwQTYsnJUaAIyky5C1snXTZIHhX4VKYAJ4AHFNoAqVlAF40HXAUUAfZJP1b3EIwA3OChkYOY2OwdkZxJdDQNtNnh8WggAGnZMTiTkACIQQnx8POReI0EYZAAKcOIAOj1NeX8ASmQECRBafXr8CSxatqMgA

标签: typescript

解决方案


in当您尝试检查对象中是否存在属性时,这是一种更好的做法:

if ('booleanValue' in value)
    console.log(value);

此检查不会产生错误。

另一方面,它没有为分配生成错误,因为 Typescript 检查对象中是否存在最小属性,但是如果您添加了更多项目,TS 就可以了。检查这部分 TS 文档以获取更多信息


推荐阅读