类型'字符串|的参数号码| string []'不能赋值给'string'类型的参数

时间:2018-03-29 08:05:04

标签: javascript jquery typescript

我的打字稿文件中有代码

这是代码

slide(event, ui) {
    $(`#stops_${i}`).val(`Max ${ui.value} ${__('byten')}`);
    $(`#filter_stops_${i}`).val(ui.value);
    if ((ui.value > 0) && ($('#filter_direct').val() === '1')) {
      $('#filter_direct').parent().children('.Switch').removeClass('On').addClass('Off');
      $('#filter_direct').val('0');
    }
    let stop_sum = 0;
    $('.filter_stops').each(function() {
      return stop_sum += parseInt($(`#filter_stops_${$(this).attr('id').split('_')[1]}`).val());
    });
    if ((stop_sum === 0) && ($('#filter_direct').val() === '0')) {
      $('#filter_direct').parent().children('.Switch').removeClass('Off').addClass('On');
      return $('#filter_direct').val('1');
    }
  }

但是在这一行:

return stop_sum += parseInt($(`#filter_stops_${$(this).attr('id').split('_')[1]}`).val());

当我尝试拆分时出现此错误。

  

[TS]   类型'字符串|的参数号码| string []'不能赋值给'string'类型的参数。     类型'number'不能指定为'string'类型。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

val可以返回多种类型中的一种,具体取决于html元素的underling类型。如果您确定这将始终为string,则最简单的解决方案是使用类型断言string

return stop_sum += parseInt($(`#filter_stops_${$(this).attr('id').split('_')[1]}`).val() as string);

另一种选择是使用类型保护来区分案例:

let value = $(`#filter_stops_${$(this).attr('id').split('_')[1]}`).val();
if (typeof value === "string") {
    return stop_sum += parseInt(value);
}
if (typeof value === "number") {
    return stop_sum += value;
} else {
    throw Error("Unsupported value type")
}