一个公司项目引入kiwi,一切都正常,但最后执行kiwi --translate,出现了以下报错:
使用 Baidu 翻译中...(node:65558) UnhandledPromiseRejectionWarning: TSError: ⨯ Unable to compile TypeScript:
src/kiwi/lang/zh-CN/index.ts(2,5): error TS7022: '__importDefault' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
src/kiwi/lang/zh-CN/index.ts(2,67): error TS7006: Parameter 'mod' implicitly has an 'any' type.
at createTSError (/chiwu/cdp-customer360-webapp/node_modules/ts-node/src/index.ts:261:12)
at getOutput (/chiwu/cdp-customer360-webapp/node_modules/ts-node/src/index.ts:367:40)
at Object.compile (/chiwu/cdp-customer360-webapp/node_modules/ts-node/src/index.ts:558:11)
at Module.m._compile (/Users/zhangjian/chiwu/cdp-customer360-webapp/node_modules/ts-node/src/index.ts:439:43)
at Module.m._compile (/Users/zhangjian/chiwu/cdp-customer360-webapp/node_modules/ts-node/src/index.ts:439:23)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:65558) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:65558) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code
看报错大体就是ts报错,由于之前引入kiwi遇到过包版本的问题,对比了老仓库,虽然版本对,也控制了kiwi-clis这个库固定在某一个版本,在内部的ts-node依赖却出现了不一致。所以就一直在这个ts-node版本不一致的问题上定位问题,大概定位了一下午,无果,下班了。
晚上做梦都在想这个插件失败的问题...
第二天早上打开电脑,还是不死心,继续看这个问题。
我发现可能是我方法问题,就一直在上面报错找关键性的报错提示语,果真
第一句才是关键:TSError: ⨯ Unable to compile TypeScript
而我又不知道通过什么关键词搜索到了别人博客也出现了Unable to compile TypeScript,
他的做法是 tsconfig.json.那个严格模式配置strict设置false即可。
于是我也这么做了,然后就成功了。
最后反思解决问题的思路,并没有认真看报错信息,而只是根据以往的经验,感觉是版本问题(不过上面的ts-node报错,结合新仓库ts-node 和之前成功引入的仓库ts-node版本不对,确实把我引入了歧途)。
再来仔细看报错的信息:
Unable to compile TypeScript:没办法编译ts
src/kiwi/lang/zh-CN/index.ts(2,5): error TS7022: '__importDefault' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer
这句话大概翻译是:
默认导入隐性定义了ts的type=any,因为他没有一个注释type(就是日常我们定义的ts类型),并且相关的直接或间接的在它自己初始化程序里。
提示就是脚本生成的ts文件在导出的时候没定义ts类型(这里也不需要定义)。
它说的这种文件
/info.ts
export default {
ConnectList: {
guanLianGuanXi: '关联关系',
},
InfoList: {
ruHuiShiJian: '入会时间',
},
};
所以这里就能联想到tsconfig.json的配置问题了。
要么用非严格模式,要么把这个kiwi目录排除掉。
总结:解决问题实际问题实际分析,不要立刻被过往的经验先入为主了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。