在打字稿函数中声明'this'的类型?

Ste*_*per 24 typescript

我在TypeScript中编写了一个笨拙的任务.我正在尝试翻译我在JavaScript中已有的东西.

因此,当grunt运行任务时,它会运行一个函数.当它运行时,grunt设置this为具有有用属性的对象,就像jQuery this使用您正在处理的元素重载一样.我可以访问有用的属性,如this.files;

grunt.registerMultiTask('clean', function() {
    this.files.forEach(function(f) { Delete(f); });
});
Run Code Online (Sandbox Code Playgroud)

所以,"删除所有文件this.files".

但是,在TypeScript中,我不知道你是否可以"提示" this某个特定类型的编译器,所以我没有得到intellisense.如何告诉TypeScript考虑this使用其他类型?

Ale*_* L. 47

现在(从TS 2.0开始)你可以this使用伪这个参数指定函数的类型(应该是第一个):

grunt.registerMultiTask('clean', function(this: SomeType) {
    //...
});
Run Code Online (Sandbox Code Playgroud)

  • [这是假的`this`参数的相关文档.](https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters) (3认同)
  • “这个”假论点很难用谷歌搜索! (2认同)

bas*_*rat 30

我如何告诉 TypeScript 将其视为不同的类型

你可以通过声明一个this参数来做到这一点。对于您的用例,我添加了this: {files:any[]}

grunt.registerMultiTask('clean', function(this: {files:any[]}) {
    this.files.forEach(function(f) { Delete(f); });
});
Run Code Online (Sandbox Code Playgroud)

更多的


小智 5

此功能现在可在TS 2.0中使用.请参阅https://github.com/Microsoft/TypeScript/pull/6739.