Declararea tipului pentru 'this' într-o funcție TypeScript?


Scriu o sarcină grunt în TypeScript. Încerc să traduc ceva ce am deja în JavaScript.

Așadar, când grunt rulează o sarcină, acesta rulează o funcție. Când rulează, grunt setează this ca un obiect cu proprietăți utile, în același mod în care jQuery suprascrie this cu elementul pe care lucrați. Aș putea accesa proprietăți utile precum this.files;

grunt.registerMultiTask('clean', function() {
    this.files.forEach(function(f) { Delete(f); });
});

Deci, „șterge toate fișierele din this.files”.

Totuși, în TypeScript, nu știu dacă poți să „sugerezi” compilatorului că this este de un anumit tip, așa că nu primesc intellisense. Cum îi spun TypeScript să considere că this este de un alt tip?

Răspuns #1

Acum (din TS 2.0) puteți specifica tipul this al unei funcții folosind un parametru fals this (ar trebui să fie primul):

grunt.registerMultiTask('clean', function(this: SomeType) {
    //...
});

Parametrii this sunt parametri falși care apar primii în lista de parametri a unei funcții

Mai multe informații aici

Răspunsul #2

Cum să-i spun TypeScript să considere că acesta este un tip diferit

Poți face asta declarând un parametru this. Pentru cazul tău de utilizare, am adăugat this: {files:any[]}:

grunt.registerMultiTask('clean', function(this: {files:any[]}) {
    this.files.forEach(function(f) { Delete(f); });
});

Mai mult

  • Documente oficiale despre parametrul this