我正在使用一个名为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转换到其他东西上。
发布于 2017-06-08 22:13:57
你有两个我能想到的选择。
考虑到以下接口:
interface ExtendedPage {
getRequest(): Request;
}(1) 这个参数
class SimplePage {
getElements(this: SimplePage & ExtendedPage) {
const request: Request = this.getRequest();
// ...
}
}(2)使用暂存属性(就像混音器)实现接口:
class SimplePage implements ExtendedPage {
getElements() {
const request: Request = this.getRequest();
// ...
}
getRequest: () => Request;
}编辑
您可以声明一个类并扩展它:
declare class ExtendedPage {
getRequest(): Request;
}
class SimplePage extends ExtendedPage {
...
}https://stackoverflow.com/questions/44446242
复制相似问题