Skip to content

Commit ac17bfd

Browse files
committed
refactor(utils)!: [isNumber] check typeof value
Signed-off-by: Lexus Drumgold <[email protected]>
1 parent 9bec8ac commit ac17bfd

File tree

4 files changed

+10
-12
lines changed

4 files changed

+10
-12
lines changed

src/utils/__tests__/is-number.spec.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ describe('unit:utils/isNumber', () => {
1313
const cases: Parameters<typeof testSubject>[] = [
1414
[[INTEGER]],
1515
[Symbol('is-number')],
16-
[Number.NaN],
1716
[faker.string.numeric()]
1817
]
1918

@@ -23,7 +22,11 @@ describe('unit:utils/isNumber', () => {
2322

2423
it('should return true if value is a number', () => {
2524
// Arrange
26-
const cases: Parameters<typeof testSubject>[] = [[FLOAT], [INTEGER]]
25+
const cases: Parameters<typeof testSubject>[] = [
26+
[FLOAT],
27+
[INTEGER],
28+
[Number.NaN]
29+
]
2730

2831
// Act + Expect
2932
cases.forEach(([value]) => expect(testSubject(value)).to.be.true)

src/utils/is-nan.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* @module tutils/utils/isNaN
44
*/
55

6-
import equal from './equal'
6+
import isNumber from './is-number'
77

88
/**
99
* Checks if `value` is {@linkcode Number.NaN}.
@@ -13,6 +13,6 @@ import equal from './equal'
1313
* @param {unknown} value - Value to check
1414
* @return {boolean} `true` if `value` is `Number.NaN`
1515
*/
16-
const isNaN = (value: unknown): boolean => equal(Number.NaN, value)
16+
const isNaN = (value: unknown): boolean => isNumber(value) && value !== +value
1717

1818
export default isNaN

src/utils/is-number.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@
1111
* @param {unknown} value - Value to check
1212
* @return {value is number} `true` if `value` is a number
1313
*/
14-
const isNumber = (value: unknown): value is number => {
15-
try {
16-
return Number(value) === value
17-
} catch {
18-
return false
19-
}
20-
}
14+
const isNumber = (value: unknown): value is number => typeof value === 'number'
2115

2216
export default isNumber

src/utils/is-numeric.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
import type { Numeric } from '#src/types'
7+
import isNaN from './is-nan'
78
import isNumber from './is-number'
89
import isString from './is-string'
910

@@ -19,7 +20,7 @@ import isString from './is-string'
1920
* @return {value is Numeric} `true` if `value` is a numeric
2021
*/
2122
const isNumeric = (value: unknown): value is Numeric => {
22-
return isString(value) && isNumber(+value)
23+
return isString(value) && isNumber((value = +value)) && !isNaN(value)
2324
}
2425

2526
export default isNumeric

0 commit comments

Comments
 (0)