gpt4 book ai didi

typescript - 歧视联合检查是否存在字段?

转载 作者:行者123 更新时间:2023-12-01 21:54:51 25 4
gpt4 key购买 nike

我想做的很简单:

我有一个类型 Foo,但在某些情况下 Foo 可能为空,所以我们有一个包含空对象的联合类型。 (这里的用例实际上是 Redux,它不允许你将 redux 状态初始化为未定义)。

interface Foo {
id: string;
data: string;
}

type PotentialFoo = Foo | {};

稍后,当我使用其中一个 PotentialFoo 时,检查它是否为 Foo 的一种简单方法是检查其中一个字段是否存在。

但是 TypeScript 编译器不喜欢这样。

const itemA: PotentialFoo = {
id: "foo",
data :"data",
}

const itemB: PotentialFoo = {};

function someFunct(item: PotentialFoo) {
if (item.id) { // Property 'id' does not exist on type '{}'.

//handle it as a Foo.
}
}

有没有办法允许在这里进行区分,就像 TypeScript 在其他情况下允许的那样?

最佳答案

在这种情况下,最简单的解决方案是使用 in 检查作为类型保护:


function someFunct(item: PotentialFoo) {
if ('id' in item) {

item.data // ok
}
}

Play

关于typescript - 歧视联合检查是否存在字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58515515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com