I want to add extension method format() to String. So my expectation is that I can use String.format wherever in my project.
I had followed the guideline of this topic but this not help. I got this error:

Can anyone help me?
Thanks in advance.
p.s: I want to add the extension method like I did in angular 1.xx
Edit
use declare global won't get error.
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;}
How we use String.format('<img alt="{0}" title="{0}" src="{1}" />', name, id);
Since format does not require parameters
For me the following worked in an Angular 6 project using TypeScript 2.8.4.
In the typings.d.ts file add:
interface String {
format(...args: string[]): string;
}
Note: No need to 'declare global'.
In a new file called string.extensions.ts add the following:
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;
});
};
To use it, first import it:
import '../../string.extensions';
Obviously your import statement should point to the correct path. Inside your class's constructor or any method:
console.log("Hello {0}".format("world"));
Based on this playground it works just fine.
It probably doesn't work for you because you're probably using modules (import/export), in that case you need to do that in the global augmentation:
declare global {
interface String {
foo(): number;
}
}
Then you won't get an error when adding foo to the prototype.
Seems like you want a static function on String, so you need to do this:
declare global {
interface StringConstructor {
format(): string;
}
}
String.format = function (...args: string[]) {
...
}
I also added the ...args: string[] to the signature which tells the compiler that the function expects any number of strings as arguments.