safeAnyToNumber
Safely convert any value to a number.
Type definition
function safeAnyToNumber<T = unknown>( inputVal: Exclude<T, (...args: never) => unknown>, fallbackNum?: number,) { result: number success: boolean}
[] => {result: 0, success: true} // same result with inputVal = [null] or [undefined][12] => {result: 12, success: true}['12'] => {result: 12, success: true}['12', '13'] => {result: fallbackNum, success: false}'[12]' => {result: fallbackNum, success: false}
[true] => {result: fallbackNum, success: false} // same result with inputVal = [false]
[BigInt(9007199254740991)] => {result: 9007199254740991, success: true}[BigInt(9007199254740991000000)] => {result: 9.007199254740991e+21, success: true}['BigInt(9007199254740991)'] => {result: fallbackNum, success: false}'[BigInt(9007199254740991)]' => {result: fallbackNum, success: false}
const inputs = [ [], [12], ['12'], ['12', '13'], '[12]', [true], [BigInt(9007199254740991)], [BigInt(9007199254740991000000)], ['BigInt(9007199254740991)'], '[BigInt(9007199254740991)]',]inputs.forEach((inputVal) => console.log(safeAnyToNumber(inputVal)))
Fallback
Default fallback number is 0
.
Example
Convert string to number:
Try typing any string (eg: 123.e5
, 0b1010
, a123
) in the input field below.
import {safeAnyToNumber} from '@kaiverse/k/utils'import {useState} from 'react'
export default function SafeAnyToNumberDemo() { const [convert, setConvert] = useState<ReturnType<typeof safeAnyToNumber>>()
return ( <> <form onSubmit={(e) => { e.preventDefault() const formData = new FormData(e.currentTarget) setConvert(safeAnyToNumber(formData.get('inputValue'))) }} > <label className="form-control w-full max-w-xs"> <span className="label label-text">String value</span> <input className="input input-bordered w-full max-w-xs" placeholder="Type any string" name="inputValue" type="text" /> </label>
<button className="btn btn-neutral my-4" type="submit"> Convert </button> </form> {!convert || ( <pre className="bg-base-200 rounded p-4"> Converted value: <strong>{convert.result}</strong> <br /> Status:{' '} {convert.success ? ( <span className="text-success">success</span> ) : ( <span className="text-error">failed</span> )} </pre> )} </> )}