Javascript 具有依赖类型的Typescript并集
如果我有下面的并集,它封装了一个函数和它的参数,我怎么能调用它呢Javascript 具有依赖类型的Typescript并集,javascript,typescript,Javascript,Typescript,如果我有下面的并集,它封装了一个函数和它的参数,我怎么能调用它呢 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'. 我不知道怎么称呼它。我尝
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
),如果我必须这样做,我可以这样做,但我觉得我不应该这样做
可以不强制转换调用此函数吗
编辑:为了澄清,我询问是否存在不涉及更改
包装定义的解决方案不完全确定您的用例,但通过使用以下方法可以实现上述目的:
类型ArgType=number |字符串
类型包装={
fn:(a:T)=>void
arg:T
}
让福来包装纸
foo.fn(foo.arg)
让我们一起来!:包装纸
foo1.fn(foo1.arg)
谢谢您的尝试。我的例子被简化了。我在寻找一个一般情况下的答案,当我们不能以这种方式将联合体移出时。问题是,给定typef=(x:A)=>t
和typeg=(x:B)=>U
,联合体typeh=F | G
是(x:A&B)=>t | U
。要调用H
类型的函数,我们需要提供一个参数,该参数是a
和B
@AluanHaddad的子类型是的,这似乎是typescript的逻辑,但它显然丢失了类型信息。我想知道是否有办法不丢失关于<代码> fn>代码>和<代码> ARG之间的关系的信息。你必须引入一个判别式,即。