三元运算符产生不满足重载函数的对象的并集

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

我有一个重载函数,它接受具有不同参数的对象。我使用三元运算符创建一个对象并将其传递。

但是,创建的对象

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);
}

游乐场

typescript overloading
1个回答
0
投票

好吧,我现在明白我的问题不正确。我能够得到一个“完美”的结合,但它对我不起作用。

我需要有条件地调用该函数,而不是传递联合作为参数:

游乐场

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 })
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.