我想将扩展方法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
不需要参数
答案 0 :(得分:6)
基于this playground,它的工作正常。
它可能不适合您,因为您可能正在使用模块(导入/导出),在这种情况下,您需要在global augmentation中执行此操作:
declare global {
interface String {
foo(): number;
}
}
然后,在向原型添加foo
时,您不会收到错误。
好像你想在String
上使用静态函数,所以你需要这样做:
declare global {
interface StringConstructor {
format(): string;
}
}
String.format = function (...args: string[]) {
...
}
我还在签名中添加了...args: string[]
,告诉编译器函数需要任意数量的字符串作为参数。
答案 1 :(得分:4)
对我来说,以下内容使用TypeScript 2.8.4在Angular 6项目中进行了工作。
在Typings.d.ts文件中添加:
interface String {
format(...args: string[]): string;
}
注意:无需“声明全局”。
在名为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';
很显然,您的import语句应指向正确的路径。 在类的构造函数或任何方法中:
console.log("Hello {0}".format("world"));