这两天我搞了 @gaubee/shim 这个包,主要是基于现有的 tc39 提案做的一些垫片,但目标不是为了搞polyfill,我的目标仍然是跟util包一样追求“无副作用”的、追求对Tree-Shaking的最佳支持。 目前提供两部分的功能:
- @gaubee/shim/decimal
- 基于big.js做的ts+fp(类型安全+函数式编程)化的改造。
- 单元测试我也完全搬过来了,并且做了一些优化,理论上性能会比big.js更好,但我没具体去测试。
- 可能是目前是最小的的 big-float 包了,因为它只包含了最基本的 parse+stringify(toString/valueOf)的能力(本质就是拆包和封包,起步200行左右的注释和代码)。
但因为是fp编程的风格,而不是链式调用,所以用起来会比较麻烦, 比如big.js是这样的:new Big('12.345').round(2).toString() 而decimal就得这样:decimal_toString(decimal_round(decimal('12.345'),2))
所以就有了pipeline这个功能:
- @gaubee/shim/pipeline
- 也是参考了tc39的pipeline提案,用法非常简单:
pipeline([ // [decimal], [decimal_round, 2], [decimal_toString], ])('12.345');
- 就是把前面一个函数的返回结果作为下一个函数的第一个参数。
- 我在市面上没找到类型安全的实现,所以就自己和AI做了一套,主要是做类型比较麻烦。但js核心代码也就一两行。
- 也是参考了tc39的pipeline提案,用法非常简单: