Array Prototype 将包含在 Array 的列表中

Array Prototype will included in the List of the Array

我正在使用打字稿在数组中添加新原型。 我发现我能够在 for 循环中打印出原型函数。

.ts

declare global {
  interface Array<T> {
    group(groupByKey: T): Array<T>;

  }
}

if (!Array.prototype.group) {
  Array.prototype.group= function<T>(this: T[], groupByKey: string): T[] {
    return group(this, groupByKey);
  };
}

控制台

var keys = Object.keys({a:1});
var str=""
    for (var k in keys) { 
        console.log(k)
    }

控制台输出为

0 
group

是否可以打印出数组中的值而不是原型值。 但是原型也可以很好地发挥作用。

您看到函数名称是因为它被定义为可枚举 属性。您可以更改定义它的方式来解决此问题:

Object.defineProperty(Array.prototype, "group", {
  value: function<T>(this: T[], groupByKey: string): T[] {
    return group(this, groupByKey);
  },
  enumerable: false, // <-- important part
  configurable: true,
  writable: true
});