是否可以将整个函数强制转换为其他类型

时间:2018-07-20 12:31:32

标签: typescript

我有这样的东西。

$('select').each(function () {
  var x = (this as HTMLSelectElement).value;
  (this as HTMLSelectElement).setSelectionRange(0,0);
  ...
});

jQuery定义文件this的类型为HTMLELement。 由于选择器,我知道this的类型为HTMLSelectElement。最好将完整功能的this强制转换为更高的类型。 当然,我可以写var _this = (this as HTMLSelectElement)。但是还可以更改函数的this类型吗?像这样的东西

$('select').each(function () this as HTMLSelectElement { ...

2 个答案:

答案 0 :(得分:2)

如果您不使用strictFunctionTypes(或在tsconfig中将其显式设置为false),则可以显式设置this参数的类型:

$('select').each(function (this: HTMLInputElement) {
    var x = this.value;
    this.setSelectionRange(0,0);    
});

如果不是最简单的解决方案,那就是使用一个额外的变量

$('select').each(function () {
    let local = this as HTMLInputElement;
    var x = local.value;
    local.setSelectionRange(0,0);    
});

尽管strictFunctionTypes,您也可以创建一个辅助函数来允许分配。

答案 1 :(得分:1)

我现在无法对其进行测试,但这应该可以:

$('select').each(function () {
   var box = this as HTMLSelectElement;
   var x = box.value;
   box.setSelectionRange(0,0);
   ...
});