如何使用Flow类型消除歧义

问题描述 投票:0回答:1

我有简单的类型,如:

type A = { a: number }
type B = { b: string }

我有一些包装与type模糊不清:

type HasType<T> = {
  node: T,
  type: 'a' | 'b',
}

我正在尝试制作一个qazxsw poi方法,它将使消除歧义使用以下内容:

factory

没有类型,function onlyA(obj: A): A { return obj; } function onlyB(obj: B): B { return obj; } 可能如下所示:

factory

所以我尝试了一些东西,

  1. function factory(obj) { if (obj.type === 'a') onlyA(obj.node) else onlyB(obj.node) } 联合: HasType
  2. 仅与类型联合,并访问其属性: function factory(obj: HasType<A> | HasType<B>): void { if (obj.type === 'a') onlyA(obj.node) else onlyB(obj.node) }
  3. 仅与类型联合,并验证属性是否存在: function factory2(obj: A | B): void { if (obj.a) onlyA(obj) else onlyB(obj) }

不幸的是,他们没有工作,可以找到function factory3(obj: A | B): void { if ('a' in obj) onlyA(obj) else onlyB(obj) } 的例子。

我错过了什么吗?我们能以不同的方式实现这一目标吗?

javascript flowtype
1个回答
1
投票

@zerkms指出的解决方案是在每种类型中具有公共属性,具有特定值,如下所示:

here

这可以测试type A = { a: number, type: "a" } type B = { b: string, type: "b" } function onlyA(obj: A): A { return obj; } function onlyB(obj: B): B { return obj; } function factory(obj: A | B): void { if (obj.type === 'a') onlyA(obj) else onlyB(obj) }

© www.soinside.com 2019 - 2024. All rights reserved.