Declaring the type of 'this' in a typescript function?
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 runs, grunt sets this
to an object with useful properties, the same way that jQuery overloads this
with the element you are working on. I could access useful properties like this.files
;
grunt.registerMultiTask('clean', function() {
this.files.forEach(function(f) { Delete(f); });
});
So, "delete all the files in this.files
".
However, in TypeScript, I don't know if you can 'hint' to the compiler that this
is a particular type, so I don't get intellisense. How do I tell TypeScript to consider this
to be a different type?
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
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); });
});
More
- Official docs on
this
parameter
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 )
}