Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用TS为内置类型创建polyfill_Javascript_Typescript - Fatal编程技术网

Javascript 如何使用TS为内置类型创建polyfill

Javascript 如何使用TS为内置类型创建polyfill,javascript,typescript,Javascript,Typescript,我有几个多边形填充,我正在我的解决方案中使用。例如,数组。包括: if (![].includes) { Array.prototype.includes = function(searchElement/*, fromIndex*/) { 'use strict'; var O = Object(this); var len = parseInt(O.length) || 0; if (len === 0) { return false;

我有几个多边形填充,我正在我的解决方案中使用。例如,
数组。包括

 if (![].includes) {
  Array.prototype.includes = function(searchElement/*, fromIndex*/) {
    'use strict';
    var O = Object(this);
    var len = parseInt(O.length) || 0;
    if (len === 0) {
      return false;
    }
    var n = parseInt(arguments[1]) || 0;
    var k;
    if (n >= 0) {
      k = n;
    } else {
      k = len + n;
      if (k < 0) {
        k = 0;
      }
    }
    while (k < len) {
      var currentElement = O[k];
      if (searchElement === currentElement ||
         (searchElement !== searchElement && currentElement !== currentElement)
      ) {
        return true;
      }
      k++;
    }
    return false;
  };
}
Array.prototype.在IE中包括
仍然
未定义的
。当然,因为TS正在扩展我的自定义类而不是原生的
数组

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
if (!Array.prototype.hasOwnProperty('includes')) {
    var MyArray = (function (_super) {
        __extends(MyArray, _super);
        function MyArray() {
            _super.apply(this, arguments);
        }
        MyArray.prototype.includes = function (searchElement, fromIndex) {
            var obj = Object(this);
            var len = parseInt(obj.length) || 0;
            if (len === 0) {
                return false;
            }
            var n = fromIndex || 0;
            var k;
            if (n >= 0) {
                k = n;
            }
            else {
                k = len + n;
                if (k < 0) {
                    k = 0;
                }
            }
            while (k < len) {
                var currentElement = obj[k];
                if (searchElement === currentElement ||
                    (searchElement !== searchElement && currentElement !== currentElement)) {
                    return true;
                }
                k++;
            }
            return false;
        };
        return MyArray;
    }(Array));
}
var u extends=(this&&this.u extends)| |函数(d,b){
如果(b.hasOwnProperty(p))d[p]=b[p];
函数{this.constructor=d;}
d、 prototype=b==null?对象。创建(b):(_uu.prototype=b.prototype,new_u());
};
if(!Array.prototype.hasOwnProperty('includes')){
var MyArray=(函数(_super){
__扩展(MyArray,_super);
函数MyArray(){
_super.apply(这个,参数);
}
MyArray.prototype.includes=函数(searchElement,fromIndex){
var obj=对象(本);
var len=parseInt(对象长度)| | 0;
如果(len==0){
返回false;
}
var n=fromIndex | | 0;
var-k;
如果(n>=0){
k=n;
}
否则{
k=len+n;
if(k<0){
k=0;
}
}
while(k

如何扩展
数组
本身?

而不是
类MyArray扩展数组{
do`Array.prototype.includes=/在此处插入函数/

更多
如果您需要

可能重复的@MikeMcCaughan,您还应该声明
包含
作为
数组的成员
,谢谢您的链接。但还有一个问题:例如,描述了
数组
扩展,但没有关于扩展强类型的内容(我的意思是
数组
或其他内容)这不是你的问题所在。只需搜索你的标题(或副本的标题)而且你会得到很多点击率。@MikeMcCaughan好吧,它回答了如何添加我的自定义方法。但是还有一个问题:我如何添加多边形填充?例如,我支持IE9,它没有
数组。包括
方法。所以我只应该在它当前不存在的情况下添加它。
字符串
没有什么特别之处。如果你定义了自己的c在typescript中,您以后能在不修改该类定义的情况下向其添加新方法吗?我知道的唯一方法是使用声明该方法,然后分别使用
defineProperty
或修改其原型来添加实现。该语言中没有一种内置方法可以一步完成。我为什么要创建
>lib.d.ts
?合并接口还不够吗?
var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
if (!Array.prototype.hasOwnProperty('includes')) {
    var MyArray = (function (_super) {
        __extends(MyArray, _super);
        function MyArray() {
            _super.apply(this, arguments);
        }
        MyArray.prototype.includes = function (searchElement, fromIndex) {
            var obj = Object(this);
            var len = parseInt(obj.length) || 0;
            if (len === 0) {
                return false;
            }
            var n = fromIndex || 0;
            var k;
            if (n >= 0) {
                k = n;
            }
            else {
                k = len + n;
                if (k < 0) {
                    k = 0;
                }
            }
            while (k < len) {
                var currentElement = obj[k];
                if (searchElement === currentElement ||
                    (searchElement !== searchElement && currentElement !== currentElement)) {
                    return true;
                }
                k++;
            }
            return false;
        };
        return MyArray;
    }(Array));
}