2015-03-07 14 views
8

Piszę grunt task w TypeScript. Próbuję przetłumaczyć coś, co już mam w JavaScript.Zgłaszanie typu "to" w funkcji maszynopisu?

Tak więc, gdy grunt uruchamia zadanie, uruchamia funkcję. Po uruchomieniu zestaw ustawia this na obiekt o przydatnych właściwościach, tak samo jak jQuery przeciąża this z elementem, nad którym pracujesz. Miałem dostęp do przydatnych właściwości, takich jak this.files;

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

"Usuń wszystkie pliki w this.files".

Jednak w TypeScript nie wiem, czy można "wskazać" kompilatorowi, że this jest szczególnym rodzajem, więc nie otrzymuję intellisense. Jak odróżnić TypeScript, aby uważał, że jest to inny typ?

Odpowiedz

2

Jak mogę powiedzieć maszynopis do rozważenia to być inny rodzaj

Nie jest dedykowany składnię tego ale istnieją jeszcze mówi o nim: https://github.com/Microsoft/TypeScript/issues/229

na razie, co masz zrobić to skutecznie jedynym sposobem choć nie będę używać twierdzenie i po prostu użyć adnotacji typu:

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

}); 
0

Mam trochę odpowiedzi. Mogę to zrobić;

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

}); 

co działa poprawnie. To będzie miało konsekwencje, tak jak nie jest w stanie napisać funkcje strzałek ...

+1

cię strzała jeszcze napisać funkcje, ponieważ zamkną się one nad zmienną 'self'. "To" w funkcjach strzałek nadal będzie niepoprawnie wpisane, ale przynajmniej możesz zapisać kilka znaków! – Yourpalal

8

Teraz (od TS 2.0) można określić funkcję za this typ za pomocą fałszywych ten parametr (powinien być pierwszy):

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

Podczas gdy okazało się, że jest to możliwe z tym:

class ClassyClass { 
    prop = 'Juicy Strings' 
} 

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

doszedłem wolą alternatywę, która nie zajmuje nieruchomość w argumenty wiersza

function x() { 
    const that: ClassyClass = this 

    console.log(that.prop) 
}