typescript how to check if a value is a number?
In TypeScript, you can check if a value is a number using several methods. Here are some common approaches:
Using typeof
Operator:
The typeof
operator can be used to check if a value is of type 'number'. This works for both integer and floating-point numbers.
function isNumber(value: any): boolean {
return typeof value === 'number';
}
console.log(isNumber(123)); // true
console.log(isNumber('123')); // false
console.log(isNumber(NaN)); // true
Using Number.isFinite
Method:
The Number.isFinite
method can be used to check if a value is a finite number. This method is more robust as it filters out NaN
, Infinity
, and -Infinity
.
function isFiniteNumber(value: any): boolean {
return typeof value === 'number' && Number.isFinite(value);
}
console.log(isFiniteNumber(123)); // true
console.log(isFiniteNumber('123')); // false
console.log(isFiniteNumber(NaN)); // false
console.log(isFiniteNumber(Infinity)); // false
Using Number
Constructor and isNaN
Function:
You can use the Number
constructor to attempt to convert a value to a number and then use isNaN
to check if the result is NaN
.
function isNumber(value: any): boolean {
return !isNaN(Number(value));
}
console.log(isNumber(123)); // true
console.log(isNumber('123')); // true
console.log(isNumber('abc')); // false
console.log(isNumber(NaN)); // false
Using parseFloat
or parseInt
:
You can use parseFloat
or parseInt
to check if a value can be parsed as a number. However, this method is less strict and may produce unexpected results for certain inputs.
function isNumber(value: any): boolean {
return !isNaN(parseFloat(value)) && isFinite(value);
}
console.log(isNumber(123)); // true
console.log(isNumber('123')); // true
console.log(isNumber('123abc')); // true
console.log(isNumber('abc')); // false
Using a Custom Type Guard: You can create a custom type guard to check if a value is a number. This is useful if you want to narrow the type within a TypeScript type system.
function isNumber(value: any): value is number {
return typeof value === 'number' && !isNaN(value);
}
let value: any = 123;
if (isNumber(value)) {
// TypeScript now knows that 'value' is a number
console.log(value.toFixed(2)); // 123.00
}
Choose the method that best fits your use case. For most scenarios, using typeof
combined with Number.isFinite
is a robust and straightforward approach.