Angular2和Typescript:如何添加字符串扩展方法/原型

jac*_*pop 15 extension-methods typescript angular

我想扩展方法添加format()String.所以我的期望是我可以String.format在我的项目中的任何地方使用.我遵循了这个主题的指导方针,但这没有用.我收到了这个错误: 在此输入图像描述

谁能帮我?

提前致谢.

ps:我想像在角度1.xx中那样添加扩展方法

在此输入图像描述


编辑

使用declare global不会得到错误.

declare global {
interface String {
    format(): string;
}}

String.prototype.format = function () :string {
var result = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
    var reg = new RegExp("\\{" + i + "\\}", "gm");
    result = result.replace(reg, arguments[i + 1]);
}
return result;}
Run Code Online (Sandbox Code Playgroud)

我们如何使用String.format('<img alt="{0}" title="{0}" src="{1}" />', name, id); 既然format不需要参数

Nit*_*mer 8

基于这个游乐场,它工作得很好.

它可能不适合您,因为您可能正在使用模块(导入/导出),在这种情况下,您需要在全局扩充中执行此操作:

declare global {
    interface String {
        foo(): number;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在添加foo到原型时不会出错.


编辑

好像你想要一个静态函数String,所以你需要这样做:

declare global {
    interface StringConstructor {
        format(): string;
    }
}

String.format = function (...args: string[]) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我还在...args: string[]签名中添加了告诉编译器该函数需要任意数量的字符串作为参数的签名.


Jac*_*ues 8

对我而言,以下内容使用TypeScript 2.8.4在Angular 6项目中进行了工作。

在types.d.ts文件中添加:

interface String {
  format(...args: string[]): string;
}
Run Code Online (Sandbox Code Playgroud)

注意:无需“声明全局”。

在名为string.extensions.ts的新文件中添加以下内容:

interface String {
  format(...args: string[]): string;
}

String.prototype.format = function (...args: string[]): string {
  var s = this;
  return s.replace(/{(\d+)}/g, function (match, number) {
    return (typeof args[number] != 'undefined') ? args[number] : match;
  });
};
Run Code Online (Sandbox Code Playgroud)

要使用它,首先导入它:

import '../../string.extensions';
Run Code Online (Sandbox Code Playgroud)

显然,您的import语句应指向正确的路径。在类的构造函数或任何方法中:

console.log("Hello {0}".format("world"));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这对我有很大帮助。如果有人需要它,您可以在tsconfig.json中添加一个快捷方式:`“ paths”:{“ @ extensions / *”:[“ ./*.extensions.ts”]}`并像这样使用它:导入'@ extensions / string';` (6认同)