如何解决当参数为泛型时,返回类型`this`被破坏
以下是代码:playground
class Smth {
public self(): this {
return this
}
public add() {
return this as this & { func(): Smth }
}
}
function f(x: Smth) {
const y = x.add() // Smth & { func(): Smth; }
y.func() // Ok
const z = y.self() // Smth & { func(): Smth; }
z.func() // Ok
}
function g<S extends Smth>(x: S) {
const y = x.add() // S & { func(): Smth; }
y.func() // Ok
const z = y.self() // S
z.func() // Error: Property 'func' does not exist on type 'S'.
}
函数f
和g
的唯一区别是第二个函数是通用的:
function f(x: Smth) {
function g<S extends Smth>(x: S) {
但是由于某种原因,它们开始表现出不同的行为
const z = const z = y.self()
方法self
被声明为返回this
,并且在非泛型函数中正常工作(z
变为Smth & { func(): Smth; }
)。但是由于某种原因,在通用函数中,z
只会得到S
而不是S & { func(): Smth; }
。
在泛型函数中调用S & { func(): Smth; }
后,我应该写些什么以获得正确的类型y.self()
?
解决方法
您可以执行此操作,但是不能使用多态print
。如果您将*
设为通用,并在呼叫站点上推断出this
,那么它会起作用。
self
不确定为什么多态this
在这种情况下不起作用。我相信您应该在GitHub上提交问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。