Как правильно вводить typedef [Symbol.iterator]?

#angular #typescript

#angular #машинопись

Вопрос:

У меня есть следующий код для разбивки на страницы в Angular:

   get meetingsPage() {
    const start = this.pagination.pageSize * ( this.pagination.currentPage - 1)
    const end = this.pagination.pageSize * this.pagination.currentPage;
    const meetings = this.meetings;
    return {
        *[Symbol.iterator]() {
            for (let i = start; i < meetings.length amp;amp; i < end; i  ) {
                yield meetings[i];
            }
        }
    };
  }
  

Это работает, но линтер жалуется на следующее сообщение:

ожидаемая подпись вызова: ‘[Symbol.iterator]’, чтобы иметь typedef (typedef)

собрания — это массив интерфейса собрания.

Что я могу сделать, чтобы сделать линтер счастливым?

Обновить:

В итоге я получаю следующее, и теперь линтер не жалуется:

   get meetingsPage(): Iterable<Meeting>} {
    const start = this.pagination.pageSize * ( this.pagination.currentPage - 1)
    const end = this.pagination.pageSize * this.pagination.currentPage;
    const meetings = this.meetings;
    return {
        *[Symbol.iterator](): Generator<Meeting, void> {
            for (let i = start; i < meetings.length amp;amp; i < end; i  ) {
                yield meetings[i];
            }
        }
    };
  }
  

Есть ли способ упростить это?

Комментарии:

1. Как правило, в большинстве случаев typescript достаточно умен, чтобы самостоятельно определять тип, и это правило не очень полезно

Ответ №1:

Ваш линтер ожидает, что ваш *[Symbol.iterator]()

будет typedef, с

interface Generator<T,TReturn,TNext> extends Iterator

Нравится:

*[Symbol.iterator](): Generator<Meeting, void> {

Комментарии:

1. Или более конкретно Generator<Meeting, void>