Add ability to properly cast a string, number, null to an integer (#990)
This commit is contained in:
58
front/src/utils/cast-as-integer-or-null.ts
Normal file
58
front/src/utils/cast-as-integer-or-null.ts
Normal file
@ -0,0 +1,58 @@
|
||||
export function canBeCastAsIntegerOrNull(
|
||||
probableNumberOrNull: string | undefined | number | null,
|
||||
): probableNumberOrNull is number | null {
|
||||
if (probableNumberOrNull === undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof probableNumberOrNull === 'number') {
|
||||
return Number.isInteger(probableNumberOrNull);
|
||||
}
|
||||
|
||||
if (probableNumberOrNull === null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (probableNumberOrNull === '') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (typeof probableNumberOrNull === 'string') {
|
||||
const stringAsNumber = +probableNumberOrNull;
|
||||
|
||||
if (isNaN(stringAsNumber)) {
|
||||
return false;
|
||||
}
|
||||
if (Number.isInteger(stringAsNumber)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
export function castAsIntegerOrNull(
|
||||
probableNumberOrNull: string | undefined | number | null,
|
||||
): number | null {
|
||||
if (canBeCastAsIntegerOrNull(probableNumberOrNull) === false) {
|
||||
throw new Error('Cannot cast to number or null');
|
||||
}
|
||||
|
||||
if (probableNumberOrNull === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (probableNumberOrNull === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof probableNumberOrNull === 'number') {
|
||||
return probableNumberOrNull;
|
||||
}
|
||||
|
||||
if (typeof probableNumberOrNull === 'string') {
|
||||
return +probableNumberOrNull;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user