-
-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Description
The following code use (value | 0) === value to test if value is int, but this method only work for 32-bit since the (value | 0) trick is hard-coded into the JavaScript engine to use 32-bit logic. It won't work for big int as 1753277400000
PineTS/src/namespaces/array/utils.ts
Lines 41 to 78 in ad26f8d
| export function isArrayOfType(array: any[], type: PineArrayType) { | |
| switch (type) { | |
| case PineArrayType.int: | |
| return array.every((value) => typeof value === 'number' && (value | 0) === value); | |
| case PineArrayType.float: | |
| return array.every((value) => typeof value === 'number' && !isNaN(value)); | |
| case PineArrayType.string: | |
| return array.every((value) => typeof value === 'string'); | |
| case PineArrayType.bool: | |
| return array.every((value) => typeof value === 'boolean'); | |
| } | |
| return false; | |
| } | |
| export function isValueOfType(value: any, type: PineArrayType) { | |
| // Untyped arrays (e.g. array.new<chart.point>()) accept any value | |
| if (type === PineArrayType.any) return true; | |
| switch (type) { | |
| case PineArrayType.int: | |
| return typeof value === 'number' && ((value | 0) === value || isNaN(value)); | |
| case PineArrayType.float: | |
| return typeof value === 'number'; | |
| case PineArrayType.string: | |
| return typeof value === 'string'; | |
| case PineArrayType.bool: | |
| return typeof value === 'boolean'; | |
| // Drawing object types accept any object (or null for na) | |
| case PineArrayType.box: | |
| case PineArrayType.label: | |
| case PineArrayType.line: | |
| case PineArrayType.linefill: | |
| case PineArrayType.table: | |
| case PineArrayType.color: | |
| return value === null || typeof value === 'object' || typeof value === 'string'; | |
| } | |
| return false; | |
| } |
A solution may be using Number.isSafeInteger(value)
return typeof value === 'number' && (Number.isSafeInteger(value) || isNaN(value));Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels