Если вы определяете расширение внутри модуля, то есть файл, содержащий import
или export
верхнего уровня, то вам необходимо использовать блок declare global
для расширения глобальной области видимости.В противном случае объявленный вами интерфейс не будет объединен с интерфейсом глобального массива, поскольку он является локальным для модуля, как и любое другое объявление.Объявить глобальный синтаксис специально для этого случая использования.
Кроме того, когда вы определяете фактический метод, вы не можете использовать функцию стрелки, если сам метод определен в терминах this
, потому что функции стрелки имеютстатическая область действия this
, в то время как динамическая this
необходима для методов.
Соединение ее
// this is a module
export {}
declare global {
interface String {
contains(other: string): boolean;
}
}
String.prototype.contains = function (other) {
return this.indexOf(other) and !== -1;
};
Обратите внимание, что независимо от того, является ли тип дополнения классом или интерфейсом,элемент должен быть объявлен в интерфейсе, как указано выше, поскольку интерфейсы могут сливаться с классами, а интерфейсы могут сливаться с интерфейсами, но классы не объединяются.