相关代码如下,在 use 函数中加入联合类型后就会告诉我 number 和 string 类型不兼容,求教应该怎样解决这个问题,换个写法的话我想要的是保留 use 的泛型
declare function use<T>(data: T, cb: (arg: T) => void): void
declare function cb1(arg: string): void
declare function cb2(arg: number): void
use('', cb1) // success
use(1, cb2) // success
const data: string | number = 9
const cb: typeof cb1 | typeof cb2 = cb1
use(data, cb) // error
我面临的实际问题是,我有一个工具函数,它会返回一个 变量 和 消费这个变量的函数,变量的类型和函数的入参是强关联的,都需要限制为同一个类型,而这两个返回值都会被另一个函数作为入参,当我的工具函数返回一个联合类型的时候就得到了错误,上面给的实例代码有点不符合实际情况,看看下面的代码应该能更好理解
declare function getCb():
| { data: string; cb: (arg: string) => void }
| { data: number; cb: (arg: number) => void }
declare function use<T>(props: { data: T; cb: (arg: T) => void }): void
use(getCb()) // error
因为你的cb 类型是cb1的类型 但是data是number