使用BigNumber.toString时,使用TypeScript触发编译错误吗?

时间:2019-03-05 23:58:59

标签: javascript typescript bignum

如果调用BigNumber.toString,是否可以使用TypeScript触发编译时错误?

特别是,我的应用遇到了bug,因为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 个答案:

答案 0 :(得分:3)

  

如果调用BigNumber.toString,是否可以使用TypeScript触发编译时错误

少量选项

创建自定义棉绒规则

tslint上的文档: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周围创建一个包装器,该包装器不会向开发人员公开任何您认为危险的东西

想法

我个人会使用补丁程序包作为更简单的方法。如果您要使用库进行大量财务工作,请考虑使用包装。