Angular2 & Typescript: как добавить метод/прототип расширения строки

Я хочу добавить метод расширения format() to String. Поэтому я ожидаю, что я могу использовать String.format где в моем проекте. Я следовал указаниям этого темы но это не поможет. Я получил эту ошибку: enter image description here

кто-нибудь может мне помочь?

спасибо заранее.

p.s: Я хочу добавить метод расширения, как в angular 1.xx

enter image description here


редактировать

использовать 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;}

как мы используем String.format('<img alt="{0}" title="{0}" src="{1}" />', name, id); С format не требует параметров

2 ответов


на основе эта площадка он работает просто отлично.

это, вероятно, не работает для вас, потому что вы, вероятно, используете модули (импорт/экспорт), в этом случае вам нужно сделать это в глобальные аугментации:

declare global {
    interface String {
        foo(): number;
    }
}

тогда вы не получите ошибку при добавлении foo к прототипу.


редактировать

кажется, что вы хотите статическую функцию на String, Так что вам нужно сделать это:

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

String.format = function (...args: string[]) {
    ...
}

Я также добавил ...args: string[] к сигнатуре, которая сообщает компилятору, что функция ожидает любое количество строк в качестве аргументов.


для меня следующее работало в проекте Angular 6 с использованием TypeScript 2.8.4.

в typings.d.TS Файл Добавить:

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

Примечание: нет необходимости "объявлять глобальный".

в новом файле под названием string.увеличение.ТС добавить следующее:

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

, чтобы использовать его, сначала импортировать его:

import '../../string.extensions';

очевидно, ваш оператор импорта должен указывать на правильный путь. Внутри конструктора вашего класса или любого метода:

console.log("Hello {0}".format("world"));