gpt4 book ai didi

typescript - 推断类泛型属性方法返回类型

转载 作者:行者123 更新时间:2023-12-03 18:52:37 25 4
gpt4 key购买 nike

我在推断类泛型属性的返回类型时遇到问题。
我有这个简单的设置:

class A<T extends B> {
constructor(public b: T) {}

getB() {
return this.b
}

bMethodResult() {
return this.b.methodOne()
}
}

class B {
methodOne() {
return { status: 'ok' }
}
}

const aOne = new A(new B())

aOne.getB() // :B

aOne.bMethodResult() // {status:string}
如您所见,TS 正确推断了 aOne.bMethodResult() 的返回类型.
但是,如果我尝试传入 B 的 child 具有不同方法签名的类,TS 不会将返回类型更新为 B子类方法。
class BChild extends B {
methodOne() {
return { status: 'ok', data: true }
}
}

const aTwo = new A(new BChild())

aTwo.getB() // : BChild // ok

aTwo.bMethodResult() // : {status:string }
// I want it to be {status:string, data:boolean}
有没有办法获得 的返回类型? child 类(class)?
TS Playground

最佳答案

您可以通过向 bMethodResult 添加返回类型来实现此目的。 :

class A<T extends B> {
// ...

bMethodResult(): ReturnType<T['methodOne']> {
return this.b.methodOne() as ReturnType<T['methodOne']>
}
}

// ...

aTwo.bMethodResult() // : {status:string, data: boolean}
但是,这需要类型断言,因为 TypeScript 推断 this.b.methodOne()成为 {status: string}而不是 ReturnType<T['methodOne']> .
Playground link

关于typescript - 推断类泛型属性方法返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66619759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com