如果我有以下包装函数和参数的并集,该如何调用?
type Wrapper = {
fn: (a: string) => void
arg: string
} | {
fn: (a: number) => void
arg: number
}
let foo!: Wrapper
foo.fn(foo.arg) // Error Type 'string' is not assignable to type 'never'.
我不知道怎么称呼它。我尝试过的所有内容基本上都归结为强制转换(例如强制转换为(a:any) => void
),但我必须这样做,但是我觉得我不必这样做。
可以在不强制转换的情况下调用此函数吗?
编辑:为澄清起见,我要问是否存在不涉及更改Wrapper
定义的解决方案。
答案 0 :(得分:0)
不确定您的用例,但可以使用以下方法实现以上目的:
type ArgType = number | string
type Wrapper<T extends ArgType> = {
fn: (a: T) => void
arg: T
}
let foo!: Wrapper<number>
foo.fn(foo.arg)
let foo1!: Wrapper<string>
foo1.fn(foo1.arg)