Как вы добавляете полифиллы в Globals в машинописном тексте (модули)

Я смог найти полифилл (при переполнении стека) для Array#includes и добавить его в typescript, но после добавления небольшого импорта в мой файл он превратился в модуль (я понимаю, почему они делают это для экспорта, но почему для импорта) и я больше не мог изменять глобальное пространство имен.

Как исправить полифилл?


interface Array<T> {
    includes(searchElement: T) : boolean;
}

// Add Array includes polyfill if needed
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill
if (!Array.prototype.includes) {
    Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
        'use strict';
        var O = Object(this);
        var len = parseInt(O.length, 10) || 0;
        if (len === 0) {
            return false;
        }
        var n = parseInt(arguments[1], 10) || 0;
        var k;
        if (n >= 0) {
            k = n;
        } else {
            k = len + n;
            if (k < 0) {k = 0;}
        }
        var currentElement;
        while (k < len) {
            currentElement = O[k];
            if (searchElement === currentElement) { // NaN !== NaN
                return true;
            }
            k++;
        }
        return false;
    };
}

person Roman A. Taycher    schedule 05.06.2016    source источник


Ответы (2)


Вам нужно объявить его в пространстве имен global:

declare global {
  interface Array<T> {
      includes(searchElement: T) : boolean;
  }
}

Более

Расширение lib.d.ts описано здесь: https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html ????

person basarat    schedule 06.06.2016

Помимо добавления объявления, вам необходимо включить этот полифилл в свой код. Один из способов сделать это — импортировать файл с объявлением и реализацией poylfill в модуль точки входа вашего приложения, если вы выполняете полифиллы основных объектов и хотите, чтобы они были доступны в любом месте вашего приложения (при условии, что у вас есть полифиллы в ./polyfill/arrayIncludes.ts ) как это:

import './polyfill/arrayIncludes';
person Ivan Leonenko    schedule 14.06.2018