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));
}