2017-05-04 1 views
3

maintenant je veux implémenter un proxy de tableau. voici mon codecomment étendre et remplacer les méthodes de tableau dans le typecript

class ArrayProxy<T> extends Array<T> { 

    constructor(data: T[]) { 
     super(...data); 
    } 

    push(...items: T[]): number { 
     var res = super.push(...items); 
     console.log("push invoked!"); 
     // some code to do extra operation. 
     return res; 
    } 
} 

var foo = new ArrayProxy(["aa","bb"]); 
foo.push("cc"); 

Il semble que mes méthodes de substitution ne soient pas invoquées. et la variable foo est une instance de Array autre que ArrayProxy.
ma version dactylographiée: 2.3.2
tsconfig.json

{ 
    "compilerOptions": { 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "moduleResolution": "classic", 
     "target": "es5", 
     "module": "system", 
     "outFile": "js/test.js" 
    } 
} 

MyTest
je cherchais une solution mais a échoué.

class MyNewArray<T> extends Array<T> { 
    getFirst() { 
     return this[0]; 
    } 
} 

var myArray = new MyNewArray<string>(); 
myArray.push("First Element"); 
console.log(myArray.getFirst()); // "First Element" 

de David Sherret
mais je suis erreur.

Uncaught (in promise) Error: myArray.getFirst is not a function 
    Evaluating http://localhost:8080/application/test/application/ts/bind_test 
    Loading application/ts/bind_test 
    at Object.execute (test.js:1733) 
    at j (system.js:4) 
    at E (system.js:4) 
    at O (system.js:4) 
    at system.js:5 

mise à jour cela fonctionne quand j'ajouter Object.setPrototypeOf(this, ArrayProxy.prototype); après le super appel dans le constructeur de ArrayProxy. Merci à @Aluan Haddad.

Répondre