【问题标题】:Typescript error condition will always return 'true' since the types 'string' and '0' have no overlapTypescript 错误条件将始终返回 'true',因为类型 'string' 和 '0' 没有重叠
【发布时间】:2020-07-26 19:17:38
【问题描述】:

完成转换后,我正在尝试将 javascript 数字转换为文字转换器到打字稿类型。我在下面的块中看到一个错误

此条件将始终返回 'true',因为类型 'string' 和 '0' 没有重叠。

export const inWords = (num: any) => {
  if ((num = num.toString()).length > 9) return 'overflow';
  const n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
  if (!n) return;
  let str = '';
  str += n[1] !== 0 ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : '';
  str += n[2] !== 0 ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : '';
  str += n[3] !== 0 ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : '';
  str += n[4] !== 0 ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : '';
  str +=
    n[5] !== 0
      ? (str !== '' ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only '
      : '';
  return str;
};

我不知道这个错误

【问题讨论】:

  • n[1] !== 0, 应该是 n[1] !== "0"

标签: javascript typescript


【解决方案1】:

const n 仅包含字符串,即使 num 是数字,因为您在第 3 行进行连接

const n = ('000000000' + num)

在您的三元表达式中,您正在执行强类型断言 (!==),它不仅会检查值,还会检查类型。

由于您的值始终是字符串,因此它始终与数字不同

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2019-07-03
    • 1970-01-01
    • 2019-05-12
    • 2020-12-11
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多