binaryOperation.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. export type Operator =
  2. | '+'
  3. | '-'
  4. | '/'
  5. | '%'
  6. | '*'
  7. | '**'
  8. | '&'
  9. | '|'
  10. | '>>'
  11. | '>>>'
  12. | '<<'
  13. | '^'
  14. | '=='
  15. | '==='
  16. | '!='
  17. | '!=='
  18. | 'in'
  19. | 'instanceof'
  20. | '>'
  21. | '<'
  22. | '>='
  23. | '<=';
  24. export default function binaryOperation(
  25. operator: Operator,
  26. left: any,
  27. right: any,
  28. ): any {
  29. switch (operator) {
  30. case '+':
  31. return left + right;
  32. case '-':
  33. return left - right;
  34. case '/':
  35. return left / right;
  36. case '%':
  37. return left % right;
  38. case '*':
  39. return left * right;
  40. case '**':
  41. return left ** right;
  42. case '&':
  43. return left & right;
  44. case '|':
  45. return left | right;
  46. case '>>':
  47. return left >> right;
  48. case '>>>':
  49. return left >>> right;
  50. case '<<':
  51. return left << right;
  52. case '^':
  53. return left ^ right;
  54. case '==':
  55. return left == right;
  56. case '===':
  57. return left === right;
  58. case '!=':
  59. return left != right;
  60. case '!==':
  61. return left !== right;
  62. case 'in':
  63. return left in right;
  64. case 'instanceof':
  65. return left instanceof right;
  66. case '>':
  67. return left > right;
  68. case '<':
  69. return left < right;
  70. case '>=':
  71. return left >= right;
  72. case '<=':
  73. return left <= right;
  74. }
  75. }