我有一个重载函数,它接受具有不同参数的对象。我使用三元运算符创建一个对象并将其传递。
但是,创建的对象
arg
是我的函数不想接受的对象的联合。
如何创建正确的对象并集?我不想改变重载的函数。
function func(a: { foo: number }): void
function func(a: { foo: string, bar: boolean}): void
function func(a: unknown) {
console.log(a);
}
// this works fine
func({ foo: 42 })
func({ foo: 'hello', bar: true })
// this doesn't
function test(foo: number | string, bar: boolean) {
const arg = typeof foo === 'string' ? { foo, bar } : { foo };
func(arg);
}
好吧,我现在明白我的问题不正确。我能够得到一个“完美”的结合,但它对我不起作用。
我需要有条件地调用该函数,而不是传递联合作为参数:
function func(a: { foo: number }): void
function func(a: { foo: string, bar: boolean}): void
function func(a: unknown) {
console.log(a);
}
// this works fine
func({ foo: 42 })
func({ foo: 'hello', bar: true })
// this works too
function test(foo: number | string, bar: boolean) {
if (typeof foo === 'string') {
func({ foo, bar });
} else {
func({ foo })
}
}