Использовать TypeScript, чтобы вызвать ошибку компиляции при использовании BigNumber.toString? - PullRequest
2 голосов
/ 06 марта 2019

Можно ли использовать TypeScript для запуска ошибки времени компиляции, если вызывается BigNumber.toString?

В частности, в моем приложении обнаружены ошибки, поскольку BigNumber.toString() будет выражать достаточно большие и достаточно малые числа в научной нотации:

> x = new BigNumber('0.00000000001')
> x.toString()
'1e-10'
> x.toFixed()
'0.00000000001'

Я пытался переопределить тип:

import {BigNumber} from "bignumber.js";

declare module "bignumber.js" {
  interface BigNumber {
    toString: never
    someOtherThing: number
  }
}

Но, похоже, это не работает (и добавлено поле someOtherThing, поэтому я знаю, что определения типов загружаются)

Как я могу вызвать ошибку компиляции, если используется BigNumber.toString?

(также обратите внимание: я установил BigNumber.config({ EXPONENTIAL_AT: 1e+9 }) и перегружен BigNumber.toString, поэтому он выдает предупреждение, но было бы неплохо иметь добавленную ошибку компиляции)

1 Ответ

3 голосов
/ 06 марта 2019

Можно ли использовать TypeScript для запуска ошибки времени компиляции, если BigNumber.toString вызывается

Несколько вариантов

Создание пользовательского правила для линтера

Документы по цлинту: https://palantir.github.io/tslint/develop/custom-rules/ Ваше пользовательское правило будет правилом проверки типа: https://palantir.github.io/tslint/usage/type-checking/

И изменить toString вызовы на BigNumber на ошибку.

Редактирование типов при установке

Удалите метод toString из BigNumber, отредактировав установленный .d.ts и подтвердите его, используя PatchPackage: https://github.com/ds300/patch-package

Создать обертку

В качестве альтернативы создайте оболочку вокруг BigNumber, которая не представляет ничего, что вы считаете опасным для ваших коллег-разработчиков ?

Мысли

Я бы лично использовал пакет исправлений, так как это более простой маршрут. Если вы выполняете большую финансовую работу с библиотекой, тогда рассмотрите обертку для вашего варианта использования.

...