В Typescript, как проверить, является ли строка числовой

В Typescript отображается сообщение об ошибке: isNaN принимает только числовые значения

isNaN('9BX46B6A')

и это возвращает false, потому что parseFloat('9BX46B6A') оценивается как 9

isNaN(parseFloat('9BX46B6A'))

Я все еще могу работать с ошибкой, отображаемой в Visual Studio, но я хотел бы сделать это правильно.

В настоящее время я написал эту измененную функцию -

static isNaNModified = (inputStr: string) => {
    var numericRepr = parseFloat(inputStr);
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}

Ответ 1

Преобразовать строку в число можно с помощью Number, а не parseFloat.

Number('1234') // 1234
Number('9BX9') // NaN

Вы также можете использовать унарный оператор плюс, если вам нравится сокращение:

+'1234' // 1234
+'9BX9' // NaN

Будьте внимательны при проверке на NaN (операторы === и !== не работают должным образом с NaN). Использование:

 isNaN(maybeNumber) // returns true if NaN, otherwise false

Ответ 2

Я решил это с помощью оператора isNumeric из библиотеки rxjs (импорт rxjs/util/isNumeric

Обновление

import { isNumeric } from 'rxjs/util/isNumeric';

, , .

var val = "5700";
if (isNumeric(val)){
   alert("it is number !");
}

Ответ 3

function isNumber(value: string | number): boolean
{
   return ((value != null) && !isNaN(Number(value.toString())));
}

Ответ 4

Я бы выбрал существующее и уже опробованное решение. Например, это из rxjs в машинописи:

function isNumeric(val: any): val is number | string {
  // parseFloat NaNs numeric-cast false positives (null|true|false|"")
  // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
  // subtraction forces infinities to NaN
  // adding 1 corrects loss of precision from parseFloat (#15100)
  return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
}

rxjs/isNumeric.ts

Ответ 5

Возможность анализа строки как числа - это вопрос времени выполнения. Typescript не поддерживает этот вариант использования, так как он ориентирован на безопасность во время компиляции (не во время выполнения).