Условие ошибки Typescript всегда будет возвращать «true», поскольку типы «string» и «0» не перекрываются - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь преобразовать число 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;
};

Я не имею понятия об этой ошибке

1 Ответ

0 голосов
/ 14 апреля 2020

const n содержит только строки, даже если num является числом, так как вы объединяете в строке 3

const n = ('000000000' + num)

В своих троичных выражениях вы делаете строгое утверждение типа (! ==), которое проверит не только значение, но и тип.

Поскольку ваше значение всегда является строкой, оно всегда будет отличаться от числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...