Нет, это не сработает. 'type {new (): Window (); Окно-прототип; } нельзя назначить типу Window. '

вы пишете машинописным шрифтом и не используете модули, можно расширить глобальныйWindow объект. Например, это компилирует:

interface Window {
    myCounter: number;
}

window.myCounter = window.myCounter || 0;
++window.myCounter;

function outputLoadingDetails() {
    console.log(`myCounter= ${window.myCounter}`)
}

Но если я префикс функцииoutputLoadingDetails с участиемexportПохоже, я конвертирую этот файл в модуль. Теперь я получаю ошибку компилятора при доступеwindow.myCounter.

interface Window {
    myCounter: number;
}

window.myCounter = window.myCounter || 0; // ERROR: property 'MyCounter' does not exist on type `Window`
++window.myCounter;                       // ERROR: property 'MyCounter' does not exist on type `Window`

export function outputLoadingDetails() {
    console.log(`myCounter= ${window.myCounter}`)  // ERROR: property 'MyCounter' does not exist on type `Window`
}

Похоже, мое объявление интерфейса больше не расширяет глобальныйWindow тип.

Один из обходных путей, который я нашел, - это поместить объявление интерфейса в отдельный*.d.ts файл, и ссылку на это из моего модуля.

Но теперь мне любопытно. Есть ли способ, которым я могу продлитьWindow интерфейс внутри кода модуля?

Ответы на вопрос(1)

Решение Вопроса

declare global {
    interface Window {
        myCounter: number;
    }
}

Больше информацииВот

Ваш ответ на вопрос