Добавление определений TypeScript для обернутых классов
Я использую пакет под названием 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
каждый раз, когда я хотел сослаться на метод.
1 ответ
У вас есть 2 варианта, которые я могу придумать.
Учитывая следующий интерфейс:
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 {
...
}