前言
- ts开发后端项目,考虑到维护的需要,还是需要ts来支持.其中涉及到的lib都能找到对应的types,但是也有例外比如eosjs-ecc
解决方法
- 简单快速,但是没有任何提示了,IDE基本的提示都没有了,对于直接将.js—>.ts可以使用
1 | // tsconfig.json中将此字段设为false |
- 自己写 **d.ts,喜欢的同学可以尝试一下
工具自动生成,推荐方式
-这里使用微软提供的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 )
});优化
- 细心的同学发现,里面的类型全是any,一点用处都没有啊?
但是这样可以有IDE的提示了,ts可以正常写代码了呢 由于一个lib我们不会完全用它的方法,那么我们只需要去修改一下我们需要使用的类型即可.比如randomKey这个方法,我们将它的declare中的按照如下更改即可,再次调用就达到了正常使用lib的目的啦
1
2// export function randomKey(cpuEntropyBits: number ): Promise<string>;
export function randomKey(cpuEntropyBits?: number ): Promise<string>;
- 细心的同学发现,里面的类型全是any,一点用处都没有啊?
优化(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^,
关于我
区块链技术痴迷的程序猿一枚,如果你喜欢我的文章,可以加上微信共同学习,共同进步。