Possibile duplicato:
Come si estende il prototipo al typescript?
Attualmente sto imparando TypeScript e vorrei sapere come è ansible aggiungere funzionalità agli oggetti esistenti. Supponiamo di voler aggiungere un’implementazione per Foo all’object String. In JavaScript vorrei fare questo:
String.prototype.Foo = function() { // DO THIS... }
Capire che classi, interfacce e moduli TypeScript sono aperti mi ha portato a provare quanto segue, senza successo
1. Riferimento dell’implementazione JavaScript da TypeScript
JavaScript: String.prototype.Foo = function() { // DO THIS... } TypeScript: var x = "Hello World"; x.Foo(); //ERROR, Method does not exist
2. Estendere l’interfaccia
interface String { Foo(): number; } var x = "Hello World"; x.Foo(); //Exists but no implementation.
3. Estendi la class
class String { Foo(): number { return 0; } } // ERROR: Duplicate identifier 'String'
Come potete vedere da questi risultati, finora sono stato in grado di aggiungere il metodo tramite un contratto di interfaccia, ma nessuna implementazione, quindi, come faccio a definire e implementare il mio metodo Foo come parte della class String preesistente?
Ho trovato la soluzione. Prende una combinazione di interfaccia e implementazione di JavaScript. L’interfaccia fornisce il contratto per TypeScript, consentendo la visibilità del nuovo metodo. L’implementazione JavaScript fornisce il codice che verrà eseguito quando viene chiamato il metodo.
Esempio:
interface String { foo(): number; } String.prototype.foo= function() { return 0; }
A partire da TypeScript 1.4 ora puoi anche estendere membri statici:
interface StringConstructor { bar(msg: string): void; } String.bar = function(msg: string) { console.log("Example of static extension: " + msg); }