I\'m writing a grunt task in TypeScript. I\'m trying to translate something I already have in JavaScript.
So, when grunt runs a task, it runs a function. When it ru
I have a bit of an answer. I can do this;
var self = <grunt.task.IMultiTask<string>>this;
self.files.forEach(function (f) {
});
which works OK. It's gonna have consequences, like not being able to write arrow functions...
Now (from TS 2.0) you can specify function's this
type by using fake this parameter (should be the first one):
grunt.registerMultiTask('clean', function(this: SomeType) {
//...
});
this
parameters are fake parameters that come first in the parameter list of a function
More info here
While I found that is now possible with this:
class ClassyClass {
prop = 'Juicy Strings'
}
function x( this: ClassyClass ) {
console.log( this.prop )
}
I have come prefer an alternative that doesn't take up real estate in the arguments line
function x() {
const that: ClassyClass = this
console.log( that.prop )
}
How do I tell TypeScript to consider this to be a different type
You can do that by declaring a this
parameter. For your use case I've added this: {files:any[]}
:
grunt.registerMultiTask('clean', function(this: {files:any[]}) {
this.files.forEach(function(f) { Delete(f); });
});