我有简单的类型,如:
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
所以我尝试了一些东西,
function factory(obj) {
if (obj.type === 'a') onlyA(obj.node)
else onlyB(obj.node)
}
联合:
HasType
function factory(obj: HasType<A> | HasType<B>): void {
if (obj.type === 'a') onlyA(obj.node)
else onlyB(obj.node)
}
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)
}
的例子。
我错过了什么吗?我们能以不同的方式实现这一目标吗?
@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)
}