@Kyki4

Как добавить свойство к уже существующему типу?

Я хочу добавить всем функциям новый метод, используя:

Function.prototype.delay = function (ms) {
    return (...args) => {
        setTimeout(() => {
            this(...args);
        }, ms)
    }
}

Однако если я попытаюсь сделать нечто подобное в TS, то мне выдаст ошибку, что подобного метода в Function не существует:
616f0ecf781c4840168180.png

Как преодолеть эту ошибку, не создавая что-то вроде:

interface newFunction extends Function {
    delay: () => {}
}

а именно для всех будущих объектов типа Function?
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 1
WblCHA
@WblCHA
Никак. Так делать не стоит. Вообще.

Но если очень хочется прострелить себе ногу...

declare global {
    interface Function<T> {
        delay(ms: number): Function<T>;
    }
}

https://stackoverflow.com/questions/12802383/exten...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Тайпскрипт часто предостерегает от плохих идей. Добавлять что-то в прототип стандартного класса - известный бэдпрактис
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы