Я хочу иметь тип переменной, основанный на типе параметра функции. Я пытался использовать дженерики, но у меня все еще есть какая-то ошибка.
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 будет знать, какой тип возвращается. Как этого добиться?
TS Playground