在typescript中使用eosjs-ecc

前言

  • ts开发后端项目,考虑到维护的需要,还是需要ts来支持.其中涉及到的lib都能找到对应的types,但是也有例外比如eosjs-ecc

解决方法

  1. 简单快速,但是没有任何提示了,IDE基本的提示都没有了,对于直接将.js—>.ts可以使用
1
2
// tsconfig.json中将此字段设为false
"noImplicitAny": false,
  1. 自己写 **d.ts,喜欢的同学可以尝试一下
  2. 工具自动生成,推荐方式
    -这里使用微软提供的dts-gen进行生成,放到项目的任意目录即可,但是还是无法使用,这时需要在最外面包裹一层 declare module ‘eosjs-ecc’{}即可,如果使用ts-node执行项目,需要在导入的时候添加ts-ignore,直接使用tsc编译则可以不用

    1
    2
    3
    4
    5
    // @ts-ignore
    import ecc from 'eosjs-ecc'
    ecc.randomKey(0).then((privateKey:string) => {
    console.log(privateKey )
    });
  3. 优化

    • 细心的同学发现,里面的类型全是any,一点用处都没有啊?
      但是这样可以有IDE的提示了,ts可以正常写代码了呢
    • 由于一个lib我们不会完全用它的方法,那么我们只需要去修改一下我们需要使用的类型即可.比如randomKey这个方法,我们将它的declare中的按照如下更改即可,再次调用就达到了正常使用lib的目的啦

      1
      2
      // export function randomKey(cpuEntropyBits: number ): Promise<string>;
      export function randomKey(cpuEntropyBits?: number ): Promise<string>;

优化(2020-02-21 15:14:56)

  • 上述第二点中,使用ts-node需要加上ts-ignore,而直接使用tsc编译为什么能过呢?
  • 原来在tsconfig.json中,我使用include属性将其声明文件包含到编译中了,故可使用.查看ts-node文档,只需要在执行ts-node 加上–files选项,这样将会加载tcconfig.json的include属性,这样就移除ts-ignore这个选项了

总结

最开始自己写*.d.ts,后续发现了居然还有dts-gen这样的工具.回头想想,利用这些工具,真香 ^0^,

关于我

区块链技术痴迷的程序猿一枚,如果你喜欢我的文章,可以加上微信共同学习,共同进步。