Typescript 如何在运行时更改链接调用的方法?

Typescript 如何在运行时更改链接调用的方法?,typescript,Typescript,类型省略=拾取 类链{ fun1(){ 将此作为省略返回 } fun2(arg:T){ 将此作为省略返回 } fun3(){ 将此作为未知链返回 } } //案例1 新链() .fun1() .fun1()//没关系 //案例2 新链() .fun3() .fun2(“”) .fun1() .fun2(1)//没问题 //案例3 新链() .fun1() .fun2(1) .fun1()//应为编译器错误 从上面的代码可以看出,typescript可以“记住”链式调用的泛型中的更改,但是“不记

类型省略=拾取
类链{
fun1(){
将此作为省略返回
}
fun2(arg:T){
将此作为省略返回
}
fun3(){
将此作为未知链返回
}
}
//案例1
新链()
.fun1()
.fun1()//没关系
//案例2
新链()
.fun3()
.fun2(“”)
.fun1()
.fun2(1)//没问题
//案例3
新链()
.fun1()
.fun2(1)
.fun1()//应为编译器错误
从上面的代码可以看出,typescript可以“记住”链式调用的泛型中的更改,但是“不记得”方法的更改


那么,如何使案例3也正常呢?

@aweiu如果你接受它们看起来有多可怕,那么很多事情都成为可能:D 我使用了参数,使其通用,并限制为
Partial


这是

这并不完全正确。问题是您忽略了此,而不是调用的类型。我认为这是不可能的,它需要引用代码中的推断类型。@AvinKavish
这是一个运行时类型。typescript中没有运行时类型,因为它以前被编译为javascriptrunning@AvinKavish那么,为什么案例2可以呢
fun3
更改了
fun2
的arg类型不正常,您正在呼叫
fun2
两次
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>

class Chain<T = number> {
    fun1() {
      return this as Omit<this, 'fun1'>
    }

    fun2(arg: T) {
      return this as Omit<this, 'fun2'>
    }

    fun3() { 
      return this as unknown as Chain<string>
    }
}

// case1
new Chain()
    .fun1()
    .fun1() // it's ok

// case2
new Chain()
    .fun3()
    .fun2('')
    .fun1()
    .fun2(1) // it'ok

// case3
new Chain()
    .fun1()
    .fun2(1)
    .fun1() // expect a compiler error