当前位置: 首页 > Web前端 > HTML

开源项目从js到ts,遇到的一些问题

时间:2023-03-28 16:57:39 HTML

早在两年前,我就拉了一个ts的分支,但稍微尝试了一下,找了一大堆借口就放弃了。最近辞职了,时间充裕,终于下定决心离ts又近了一步。在准备工作中,先是在网上找了一些ts相关的资料,将原本仅限于demo的ts技巧稍作改进。在这个过程中,我强迫自己先学再做。虽然在学习的过程中没有写一行代码是一件很不愉快的事情,但是总的来说节省了很多时间。框架无关开源项目GridManager是原生js实现的跨框架(jquery、react、vue2.x、angular1.x)表格组件,因此切换ts的过程中不涉及框架特性。js文件解析错误的问题总结及解决对于一个已有的项目,很难做到一次完全切换,所以需要支持对原js文件的解析。{"compilerOptions":{//Allowtocompilejavascriptfiles"allowJs":true}}不能使用object[key]方法刚调整完配置,全屏时这种报错最多。//tsconfig.json{"compilerOptions":{//启用配置项suppressImplicitAnyIndexErrors"suppressImplicitAnyIndexErrors":true}}不能使用装饰器相关介绍中提到装饰器在ts中是实验性的,虽然有点可惜但是还好有配置项可以启用。//tsconfig.js{"compilerOptions":{"experimentalDecorators":true,//EnableexperimentalESdecorators}}webpackaliasinvalidation原本可用的别名无效,导致大量导入模块路径错误。//webpackconfig//原来webpack配置的别名如下,但是在ts文件中是无效的resolve:{extensions:['.js','.ts'],//requrie模块不能时找到,添加这些后缀别名:{'@common':resolve('src/common'),'@jTool':resolve('src/jTool'),'@module':resolve('src/module')}},//tsconfig.js{"compilerOptions":{//在paths中配置解析路径"paths":{"@*":["./src/*"]}}}在转换过程中,build体积变大。这是由于ts-loader进行了es5转换,原来的babel优化失效了。指定ECMAScript的目标版本//tsconfig.js{"compilerOptions":{//将tsconfig.json中的目标调整为es6。如果项目中使用了ES2017的特性,则需要改成ES2017。//配置后,ts文件解析将不再负责es6转es5"target":"ES2017"module}}指定webpackloader:执行完ts-loader后继续执行babel-loader。//webpackloader{test:/.tsx?$/,exclude:/node_modules/,use:[{loader:'babel-loader'},{loader:'ts-loader'}]}karma启动报错项目的单元测试中使用的karma-webpack也需要添加ts-loader。//karma-webpackloader{test:/.tsx?$/,exclude:/node_modules/,use:[{loader:'babel-loader'},{loader:'ts-loader'}]}异常导出默认错误只有一个exportdefault但是提示有多个exportdefaults。错误码(TS2528:Amodulecannothavemultipledefaultexports.)解决方法:重新打开文件解决。