原有vue项目接入typescript

作者 | 陈龙

为什么要接入typescript

javascript由于自身的弱类型,使用起来非常灵活。

这也就为大型项目、多人协作开发埋下了很多隐患。如果是自己的私有业务倒无所谓,主要是对外接口和公共方法,对接起来非常头疼。主要表现在几方面:

  1. 参数类型没有校验,怎么传都有,有时会出现一些由于类型转换带来的未知问题。

  2. 接口文档不规范,每次都要通过读代码才能知道传什么,怎么传

  3. 接口编写符合规范,但是公共库中有大量的处理类型校验的代码

这就非常不利于工程标准化。于是我们决定引入typescript进行代码层面的强校验。

概览

原有vue项目接入ts主要包含下面几大步骤:

  1. 安装typescript相关npm包

  2. 修改webpack和ts配置文件

  3. 项目公共库和vue文件改造

ok,我们开始

1. 安装typescript相关npm包

这块有个非常重要的点需要注意:

就是要根据你本地的环境,去升级对应版本的typescript

这块是很多初次使用的同学都会遇到的问题。

因为只是看到了官网的教程,一步一步安装完发现各种报错。主要问题就是webpack版本不匹配,或者其他一些npm包版本不匹配

以我本地为例:

我本地环境是webpack3,所以直接安装最新版本的typescript,控制台会报错webpack版本过低的问题。

所以你要不把自己的webpack升级到webapck4.要不就采用与之相匹配的typescript版本。

我选择的是后者,因为直接给自己的项目升级到webapck4,会花费更长的时间。我们用的脚手架是公司内部统一的。里面集成了很多底层通用的基础服务。冒然升级webpack4会带来更大的麻烦,更何况项目时间比较紧迫,你懂得。

下面是我安装的包和对应的版本:

  • "typescript": "^3.1.4" (这个是必须的,ts库)

  • "ts-loader": "^3.5.0" (识别ts的laoder)

  • "tslint": "^5.11.0" (tslint校验库)

  • "tslint-loader": "^3.5.4" (tslint的loader)

  • "tslint-config-standard": "^8.0.1" (用于tslint默认校验规则)

  • "vue-property-decorator": "^7.2.0" (用于在.vue文件中使用ts语法)

2. 修改配置文件

  • 修改webpack配置文件(加入ts的相关配)

 
 
  1. base: {

  2.  entry: {

  3.    ...

  4.    app: resolve('src/main.ts') // 把main.js改为main.ts

  5.  }

  6. ...

  7. resolve: {

  8.  ...

  9.  extensions: ['vue', '.js', '.ts']

  10. }

  11. module: {

  12.  rules: [

  13.    ...,

  14.    {                           // 加入对文件的ts识别        

  15.      test: /\.ts$/,

  16.      exclude: /node_modules/,

  17.      enforce: 'pre',

  18.      loader: 'tslint-loader'

  19.    }, {

  20.      test: /\.tsx?$/,

  21.      loader: 'ts-loader',

  22.      exclude: /node_modules/,

  23.      options: {

  24.        appendTsSuffixTo: [/\.vue$/],

  25.      }

  26.    }

  27.  ]

  28. }

注意: main.js改成main.ts后,还要做一些改造,这个比较简单,按照tslint的错误提示改就可以了

  • 在根目录下创建tslint.json(类似eslint,这里设定一个校验标准)

 
 
  1. {

  2.  "extends": "tslint-config-standard",

  3.  "globals": {

  4.    "require": true

  5.  }

  6. }

  • 在根目录创建tsconfig.json(typescript配置文件)

 
 
  1. {

  2.  "compilerOptions": {

  3.    // 编译目标平台

  4.    "target": "es5",

  5.    // 输出目录

  6.    "outDir": "./dist/",

  7.    // 添加需要的解析的语法,否则TS会检测出错。

  8.    "lib": ["es2015", "es2016", "dom"],

  9.    // 模块的解析

  10.    "moduleResolution": "node",

  11.    // 指定生成哪个模块系统代码

  12.    "module": "esnext",

  13.    // 在表达式和声明上有隐含的any类型时报错

  14.    "noImplicitAny": false,

  15.    // 把 ts 文件编译成 js 文件的时候,同时生成对应的 map 文件

  16.    "sourceMap": true,

  17.    // 允许编译javascript文件

  18.    "allowJs": true,

  19.    // 指定基础目录

  20.    "baseUrl": "./",

  21.    // 启用装饰器

  22.    "experimentalDecorators": true,

  23.    // 移除注释

  24.    "removeComments": true,

  25.    "pretty": true,

  26.    // 是相对于"baseUrl"进行解析

  27.    "paths": {

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值