【发布时间】:2020-07-04 22:59:34
【问题描述】:
我想要一个基于函数参数类型的变量类型。我尝试使用泛型,但仍然有一些错误。
interface A {
value: string;
}
interface B {
value: number;
}
interface extA extends A {
id?: string;
}
interface extB extends B {
id?: number;
}
function foo<T extends A | B>(param: T) {
const newParam: T extends A ? extA : extB = param;
newParam.id = param.value;
return newParam;
}
const a = { value: "1" } as A;
const b = { value: 1 } as B;
const resultA = foo(a); // resultA is "extA" not "extA | extB"
const resultB = foo(b); // resultB is "extB" not "extA | extB"
代码是编造的,但它显示了这个想法。基于函数参数param 的类型,我想使用任一主要类型newParam 的扩展类型。因此,如果我选择每种类型之一的参数,TS 将知道返回的是哪种类型。如何做到这一点?
【问题讨论】:
标签: typescript typescript-generics