Advertisement
ivolnoboi

Calculator

Jan 19th, 2022
1,360
54 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Нужно типизировать интерфейс Calculator, так, чтобы вызовы `calculator` были
  3.     с ошибками компиляции или без них в зависимости от переданных параметров.
  4.     Типы SumAction, LengthAction, ZeroAction также можно менять.
  5. */
  6.  
  7. type SumAction = (param1: number, param2: number) => number;
  8. type LengthAction = (param: string) => number;
  9. type ZeroAction = (param: string | number) => any;
  10. type LogAction = (param: number) => (param: number) => number;
  11.  
  12. interface Calculator {
  13.     (command: 'sum'): SumAction;
  14.     (command: 'length'): LengthAction;
  15.     (command: 'zero'): ZeroAction;
  16.     (command: 'log'): LogAction;
  17. }
  18.  
  19. /* Этот код трогать не нужно */
  20. const calculator: Calculator = (command: string): any => {
  21.     switch (command) {
  22.         case "sum":
  23.             return (a: any, b: any) => a + b;
  24.         case "length":
  25.             return (a: any) => a.length;
  26.         case "zero":
  27.             return (a: any) => typeof a === "string" ? a.length !== 0 : a !== 0;
  28.         case "log":
  29.             return (b: any) => (a: any) => Math.log(a) / Math.log(b)
  30.     }
  31. }
  32. /* --- */
  33.  
  34. /* Без ошибок */
  35. calculator("sum")(10, 15)
  36. calculator("length")("qweqweq")
  37. calculator("zero")(10)
  38. calculator("zero")("qweqwe")
  39. const ln = calculator("log")(Math.E)
  40. ln(15)
  41. calculator("log")(2)(256)
  42. /* Без ошибок */
  43.  
  44. /*
  45.     Комментариями @ts-expect-error помечены строчки, в которых должны быть ошибки в финальном решении.
  46.     Если в этих строчках ошибок не будет, компилятор TS выдаст ошибку компиляции, подробнее можно прочитать здесь:
  47.     https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#-ts-expect-error-comments
  48. */
  49.  
  50. /* С ошибками */
  51. // @ts-expect-error
  52. calculator("lalaka")("malaka")
  53.  
  54. // @ts-expect-error
  55. calculator("sum")(true)
  56. // @ts-expect-error
  57. calculator("sum")(10)
  58. // @ts-expect-error
  59. calculator("sum")("1")
  60.  
  61. // @ts-expect-error
  62. calculator("length")(10)
  63. // @ts-expect-error
  64. calculator("length")(true)
  65. // @ts-expect-error
  66. calculator("length")("a", "b")
  67.  
  68. // @ts-expect-error
  69. calculator("zero")(10, 10)
  70. // @ts-expect-error
  71. calculator("zero")(10, "10")
  72. // @ts-expect-error
  73. calculator("zero")("10", 10)
  74. // @ts-expect-error
  75. calculator("zero")(true)
  76. // @ts-expect-error
  77. calculator("zero")({})
  78. // @ts-expect-error
  79. calculator("zero")([])
  80.  
  81. // @ts-expect-error
  82. calculator("log")("e")
  83. // @ts-expect-error
  84. calculator("log")("10")
  85. // @ts-expect-error
  86. calculator("log")(true)
  87. // @ts-expect-error
  88. calculator("log")(10)("100")
  89. // @ts-expect-error
  90. calculator("log")(10)(true)
  91. // @ts-expect-error
  92. calculator("log")(2, 1024)
  93. /* --- */
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement