Angular2 和 Typescript:如何添加字符串扩展 method/prototype
Angular2 & Typescript: How to add string extension method/prototype
我想将扩展方法 format()
添加到 String
。所以我的期望是我可以在我的项目中的任何地方使用 String.format
。
我遵循了此 topic 的指导方针,但这无济于事。我收到此错误:
谁能帮帮我?
提前致谢。
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
不需要参数
基于 this playground 它工作得很好。
它可能对您不起作用,因为您可能正在使用模块 (import/export),在这种情况下,您需要在 global augmentation:
中执行此操作
declare global {
interface String {
foo(): number;
}
}
那么在原型中添加foo
就不会报错了。
编辑
您似乎想要 String
上的静态函数,因此您需要这样做:
declare global {
interface StringConstructor {
format(): string;
}
}
String.format = function (...args: string[]) {
...
}
我还在签名中添加了 ...args: string[]
,它告诉编译器该函数需要任意数量的字符串作为参数。
对我来说,以下是使用 TypeScript 2.8.4 在 Angular 6 项目中工作的。
在 typings.d.ts 文件中添加:
interface String {
format(...args: string[]): string;
}
注意:不需要'declare global'。
在名为 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;
});
};
要使用它,首先导入它:
import '../../string.extensions';
显然您的导入语句应该指向正确的路径。
在 class 的构造函数或任何方法中:
console.log("Hello {0}".format("world"));
我想将扩展方法 format()
添加到 String
。所以我的期望是我可以在我的项目中的任何地方使用 String.format
。
我遵循了此 topic 的指导方针,但这无济于事。我收到此错误:
谁能帮帮我?
提前致谢。
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
不需要参数
基于 this playground 它工作得很好。
它可能对您不起作用,因为您可能正在使用模块 (import/export),在这种情况下,您需要在 global augmentation:
中执行此操作declare global {
interface String {
foo(): number;
}
}
那么在原型中添加foo
就不会报错了。
编辑
您似乎想要 String
上的静态函数,因此您需要这样做:
declare global {
interface StringConstructor {
format(): string;
}
}
String.format = function (...args: string[]) {
...
}
我还在签名中添加了 ...args: string[]
,它告诉编译器该函数需要任意数量的字符串作为参数。
对我来说,以下是使用 TypeScript 2.8.4 在 Angular 6 项目中工作的。
在 typings.d.ts 文件中添加:
interface String {
format(...args: string[]): string;
}
注意:不需要'declare global'。
在名为 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;
});
};
要使用它,首先导入它:
import '../../string.extensions';
显然您的导入语句应该指向正确的路径。 在 class 的构造函数或任何方法中:
console.log("Hello {0}".format("world"));