2015-03-07 12 views
8

Sto scrivendo un grunt task in TypeScript. Sto cercando di tradurre qualcosa che ho già in JavaScript.Dichiarare il tipo di "questo" in una funzione dattiloscritto?

Quindi, quando grunt esegue un'attività, esegue una funzione. Quando viene eseguito, grunt imposta this su un oggetto con proprietà utili, allo stesso modo in cui jQuery esegue il sovraccarico di this con l'elemento su cui si sta lavorando. Potrei accedere a proprietà utili come this.files;

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

Quindi, "eliminare tutti i file in this.files".

Tuttavia, in TypeScript, non so se è possibile "suggerire" al compilatore che this è un tipo particolare, quindi non ottengo intellisense. Come dire a TypeScript di considerare this un tipo diverso?

risposta

2

Come faccio dico dattiloscritto di prendere in considerazione che si tratta un tipo diverso

Non c'è una sintassi dedicato per questo ancora, ma ci sono ne parla: https://github.com/Microsoft/TypeScript/issues/229

Per ora quello che hai fatto è effettivamente l'unico modo, anche se non vorrei usare un asserzione e basta usare un tipo di annotazione:

var self:grunt.task.IMultiTask<string> = this; 
self.files.forEach(function (f) { 

}); 
0

Ho un po 'di risposta. Posso farlo;

var self = <grunt.task.IMultiTask<string>>this; 
self.files.forEach(function (f) { 

}); 

che funziona OK. Sta andando avere conseguenze, come non essere in grado di scrivere le funzioni di direzione ...

+1

È una freccia ancora scrivere funzioni, poiché si chiuderanno sulla variabile 'self'. 'questo' nelle funzioni di freccia sarà ancora digitato in modo errato, ma almeno è possibile salvare alcuni caratteri! – Yourpalal

8

Ora (da TS 2.0) è possibile specificare il tipo di this funzione utilizzando falsi questo parametro (dovrebbe essere il primo):

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

Mentre ho trovato che è ora possibile con questo:

class ClassyClass { 
    prop = 'Juicy Strings' 
} 

function x(this: ClassyClass) { 
    console.log(this.prop) 
} 

Sono venuto preferiscono un'alternativa che non occupa immobiliare negli argomenti della riga

function x() { 
    const that: ClassyClass = this 

    console.log(that.prop) 
} 
Problemi correlati