Estensione della funzionalità in TypeScript

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); }