Angular2 & Typescript: как добавить метод/прототип расширения строки
Я хочу добавить метод расширения format()
to String
. Поэтому я ожидаю, что я могу использовать String.format
где в моем проекте.
Я следовал указаниям этого темы но это не поможет. Я получил эту ошибку:
кто-нибудь может мне помочь?
спасибо заранее.
p.s: Я хочу добавить метод расширения, как в angular 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;}
как мы используем 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"));