我正在使用名为react-server
的程序包,该程序包可以使用任何类,并在运行时向其添加方法。它希望它包含的类具有类似
interface {
getElements(): Array<React.Component>
}
它将向类添加方法,如getRequest()
,也可以从类内部引用。
想象一下像以下一样的页面类:
class SimplePage {
getElements() {
// Right now, this wouldn't compile, because this.getRequest() is
// not an available method.
const request: Request = this.getRequest();
// ...
}
}
鉴于this.getRequest()
在编译时实际上并不存在,并且react-server
实际上没有提供我可以从我的定义文件中引用的任何实际类或接口,有什么方法可以创建一个我可以使用的定义,这个定义实际上是一个Page
类型,并且可以使用这些方法吗?
理想情况下,我希望能够在某个定义文件(.d.ts
)中提供这些内容,以便我可以在使用react-server
的任何应用中引用它们。我也很乐意这样做,而不是每次我想引用这个方法时都被迫将this
投射到别的东西上。
答案 0 :(得分:1)
您可以考虑两个选项 给出以下界面:
interface ExtendedPage {
getRequest(): Request;
}
(1)this parameter:
class SimplePage {
getElements(this: SimplePage & ExtendedPage) {
const request: Request = this.getRequest();
// ...
}
}
(2)使用替换属性(like with mixins)实现接口:
class SimplePage implements ExtendedPage {
getElements() {
const request: Request = this.getRequest();
// ...
}
getRequest: () => Request;
}
您可以声明一个类并对其进行扩展:
declare class ExtendedPage {
getRequest(): Request;
}
class SimplePage extends ExtendedPage {
...
}