Добавление определений 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 {
    ...
}
Другие вопросы по тегам