Je veux ajouter la méthode d'extension format()
à String
. Donc, je m'attends à ce que je puisse utiliser String.format
N'importe où dans mon projet. J'avais suivi la ligne directrice de ce sujet mais cela n'aide pas. J'ai eu cette erreur:
Quelqu'un peut-il m'aider?
Merci d'avance.
p.s: Je veux ajouter la méthode d'extension comme je l'ai fait dans angular 1.xx
Modifier
utiliser declare global
n'obtiendra pas d'erreur.
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;}
Comment nous utilisons String.format('<img alt="{0}" title="{0}" src="{1}" />', name, id);
Puisque format
ne nécessite pas de paramètres
Basé sur ce terrain de je cela fonctionne très bien.
Cela ne fonctionne probablement pas pour vous car vous utilisez probablement des modules (import/export), dans ce cas, vous devez le faire dans le augmentation globale :
declare global {
interface String {
foo(): number;
}
}
Vous n'aurez alors aucune erreur lors de l'ajout de foo
au prototype.
Il semble que vous souhaitiez une fonction statique sur String
, vous devez donc procéder comme suit:
declare global {
interface StringConstructor {
format(): string;
}
}
String.format = function (...args: string[]) {
...
}
J'ai également ajouté le ...args: string[]
à la signature qui indique au compilateur que la fonction attend un nombre quelconque de chaînes comme arguments.
Pour moi, ce qui suit a fonctionné dans un projet Angular 6 utilisant TypeScript 2.8.4.
Dans le fichier typings.d.ts, ajoutez:
interface String {
format(...args: string[]): string;
}
Remarque: Pas besoin de "déclarer global".
Dans un nouveau fichier appelé string.extensions.ts, ajoutez ce qui suit:
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;
});
};
Pour l'utiliser, importez-le d'abord:
import '../../string.extensions';
Évidemment, votre déclaration d'importation doit pointer vers le bon chemin. Dans le constructeur de votre classe ou n'importe quelle méthode:
console.log("Hello {0}".format("world"));