Невозможно удовлетворить требование tslint при добавлении нового метода в глобальный экран - PullRequest
0 голосов
/ 27 августа 2018

Я хочу использовать блокировку ориентации экрана (функция https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation/lock) в различных веб-браузерах.

Вот моя попытка:

export function lock(orientation: OrientationLockType) {
    const lockOrientation: (orientation: OrientationLockType) => boolean = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation || screen.orientation.lock;
    lockOrientation(orientation);
}

Флаги визуального кода screen.mozLockOrientation потому что он не существует в типе Screen.

Поэтому я добавляю это

declare global {
    interface Screen {
        mozLockOrientation: (orientation: OrientationLockType) => boolean;
    }
}

Однако tslint не нравится объявление типа mozLockOrientation, потому что оно не являетсяподпись метода.

Итак, мои вопросы:

1) Что такое подпись метода и как я могу преобразовать вышеизложенное в сигнатуру метода?

2) Как я могуузнать правильный тип для screen.orientation.lock?Я пытался orientation: { lock: (orientation: OrientationLockType) => boolean };, но мне интересно, есть ли еще авторитетные источники.

1 Ответ

0 голосов
/ 28 августа 2018

1) Вот как вы бы написали эквивалентную сигнатуру метода:

declare global {
    interface Screen {
        mozLockOrientation(orientation: OrientationLockType): boolean;
    }
}

2) Если вы перейдете по ссылке со страницы MDN на спецификацию , у нее будет объявление WebIDL, которое разумно похоже на TypeScript и указывает тип возвращаемого значения Promise<void>, а не boolean.

...