2017-06-13 1 views
0

J'essaie d'ajouter une nouvelle méthode (last) à la classe Array.Extension de la classe Array en ajoutant une nouvelle méthode à l'interface globale

C'est ce que je fais (amoung autres fonctions déclarées) dans mon dossier test.ts: cela ne fonctionne pas

declare global { 
    interface Array<T> { 
     last(): T; 
    } 
} 

if (!Array.prototype.last) { 
    Array.prototype.last = function <T>(): T { 
     return this[this.length - 1]; 
    } 
} 

Cependant, comme il semble effacer complètement les autres définitions pour Array maintenant je reçois des erreurs comme:

TypeError: Cannot read property 'length' of undefined

Cela se produit si je tente d'accéder à la propriété length des éventuels tableaux.

Comment puis-je y parvenir correctement? La déclaration doit-elle entrer dans un fichier par elle-même?

+0

Utilisez-vous un système de module? Autrement dit, utilisez-vous 'import' /' export'? –

+0

@NitzanTomer Non, j'ai simplement cette déclaration dans le même fichier que je l'utilise. IntelliJ ne montre pas d'erreurs, mais une fois que je compile, je reçois les erreurs – smac89

+0

@NitzanTomer, En fait, j'ai des importations au sommet de le fichier. Cela change-t-il quelque chose? – smac89

Répondre

1

Vous avez seulement besoin d'augmenter le module global lorsque vous importez/exportez.

Parce que ce n'est pas votre cas, il vous suffit de le faire:

interface Array<T> { 
    last(): T; 
} 

qui est, ne pas envelopper avec declare global { ... }.

En outre, dans la mise en œuvre effective, il n'y a pas besoin de médicaments génériques, il peut/doit être:

if (!Array.prototype.last) { 
    Array.prototype.last = function(): any { 
     return this[this.length - 1]; 
    } 
} 
+1

Merci pour la réponse rapide. Je reçois maintenant les erreurs suivantes: 'Property 'last' n'existe pas sur type 'string []'' et 'Property' last 'n'existe pas sur type' any [] '' – smac89

+0

L'erreur est sur n'importe où j'ai' ' Array.prototype.last' et pratiquement partout ailleurs j'ai utilisé 'someArray.last()' – smac89