我正在使用TypeScript编写grunt task。我正在尝试翻译我在JavaScript中已有的东西。
因此,当grunt运行任务时,它会运行一个函数。当它运行时,grunt将this
设置为具有有用属性的对象,就像jQuery使用您正在处理的元素重载this
一样。我可以访问有用的属性,如this.files
;
grunt.registerMultiTask('clean', function() {
this.files.forEach(function(f) { Delete(f); });
});
所以,“删除this.files
”中的所有文件。
但是,在TypeScript中,我不知道你是否可以“提示”this
是特定类型的编译器,所以我没有得到intellisense。如何告诉TypeScript将this
视为不同的类型?
答案 0 :(得分:32)
现在(来自TS 2.0)您可以使用fake this参数指定函数的this
类型(应该是第一个):
grunt.registerMultiTask('clean', function(this: SomeType) {
//...
});
更多信息here
答案 1 :(得分:5)
此功能现在可在TS 2.0中使用。请参阅https://github.com/Microsoft/TypeScript/pull/6739。
答案 2 :(得分:1)
如何告诉TypeScript将其视为不同的类型
目前还没有专门的语法,但有关于它的讨论:https://github.com/Microsoft/TypeScript/issues/229
现在你所做的实际上是唯一的方法,虽然我不会使用断言而只是使用类型注释:
var self:grunt.task.IMultiTask<string> = this;
self.files.forEach(function (f) {
});
答案 3 :(得分:1)
虽然我发现现在可以用这个:
class ClassyClass {
prop = 'Juicy Strings'
}
function x( this: ClassyClass ) {
console.log( this.prop )
}
我更喜欢在参数行中不占用房地产的替代方案
function x() {
const that: ClassyClass = this
console.log( that.prop )
}
答案 4 :(得分:0)
我有点答案。我能做到这一点;
var self = <grunt.task.IMultiTask<string>>this;
self.files.forEach(function (f) {
});
哪个有效。它会产生后果,比如无法编写箭头功能......