Как я могу расширить класс сборки, такой как HTMLElement или Node, внутри модуля машинописи? - PullRequest
0 голосов
/ 29 августа 2018

Этот код работает в машинописном файле:

interface Node {
    replaceWith(newnode): void;
}

Node.prototype.replaceWith = function(newnode: Node) {
    this.parentElement.replaceChild(newnode, this);
};

Он перестает работать, как только файл становится модулем. Итак, добавив это:

export let x = 42 // export statement turns the ts file into a module

компилятор жалуется: Свойство replaceWith не существует для типа 'Node'. Почему это и как обойти?

Я понимаю, что расширение должно быть объявлено в глобальной "области видимости", и модуль больше не является достаточно глобальным. Но в то время как в C ++, например, я всегда могу добавить квадратные скобки вокруг блока и сделать его глобальной областью видимости, в машинописном тексте я не вижу аналогичного пути.

1 Ответ

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

Глобальные типы должны быть объявлены как глобальные, если вы находитесь в модуле, в противном случае они будут рассматриваться как обычный тип области действия модуля:

declare global {
    interface Node {
        replaceWith(newnode: Node): void;
    }    
}
Node.prototype.replaceWith = function(newnode: Node) {
    this.parentElement.replaceChild(newnode, this);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...