typescript extends Array原型

时间:2017-12-01 10:46:51

标签: arrays typescript prototype

我只想用一种方法扩展Array原型,将sting数组的每个项转换为大写,我的第一种方法:

Array.prototype.toUppercase = () => {map(String.toUppercase);}

为什么不工作?

非常感谢!

1 个答案:

答案 0 :(得分:3)

您需要在实施之前声明该成员

interface Array<T> {
  toUpperCase(this: string[]): string[];
}

实现看起来大致如此

if (typeof Array.prototype.toUpperCase !== 'function') {
    Array.prototype.toUpperCase = function () {
      return this.map(s => s.toUpperCase());
    };
}

请注意,对现有成员的检查有点草率。仅仅因为它是一个函数并不意味着它具有与我们在那里放置的行为相同的行为。通常应该避免增加内置原型,但有时它很有用。永远不要在库中执行此操作,并警告您的代码可能会在未来的某些环境中中断。

Running example

我们可以看到,如果我们在错误类型的数组

上调用它,TypeScript将引发错误
[1, 2, 3].toUpperCase(); // Error

['a,', 'b', 'c'].toUpperCase(); // OK

请注意,如果您在模块上下文中,则会将声明部分包装在declare global块中。