1

我正在使用一个名为的包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每次我想引用该方法时都被迫转换为其他东西。

4

1 回答 1

1

你有两个我能想到的选择。
给定以下界面:

interface ExtendedPage {
    getRequest(): Request;
}

(1) this 参数

class SimplePage {
    getElements(this: SimplePage & ExtendedPage) {
        const request: Request = this.getRequest();
        // ...
    }
}

(2) 使用替代属性实现接口(如使用 mixins):

class SimplePage implements ExtendedPage {
    getElements() {
        const request: Request = this.getRequest();
        // ...
    }

    getRequest: () => Request;
}

编辑

您可以声明一个类并扩展它:

declare class ExtendedPage {
    getRequest(): Request;
}

class SimplePage extends ExtendedPage {
    ...
}
于 2017-06-08T22:13:57.403 回答