背景:vue2项目接入ts落地

安装包

  1. npm install typescript --save-dev // 4.1.3
  2. npm install ts-loader --save-dev // 8.0.14
  3. npm install tslint --save-dev // 6.1.3
  4. npm install tslint-loader --save-dev // 3.5.4
  5. npm install tslint-config-standard --save-dev // 9.0.0
  6. npm install vue-property-decorator --save-dev // 9.1.2

修改配置文件
添加ts加载器
base.js

  1. entry: {
  2. app './src/mian.ts' // 入口文件, 旧main.js
  3. }
  4. reslove: {
  5. extensions: ['.js', 'ts', '.vue', '.json'] // 引入模块时不带扩展
  6. }
  7. module: {
  8. rules: [
  9. {
  10. test: /\.ts$/,
  11. exclude: /node_modules/,
  12. enforce: 'pre',
  13. loader: 'tslint-loader'
  14. },
  15. {
  16. test: /\.tsx?$/,
  17. loader: 'ts-loader',
  18. exclude: /node_modules/,
  19. options: {
  20. appendTsSuffixTo: [/\.vue$/]
  21. }
  22. },
  23. ]
  24. }

main.ts

错误Cannot read property ‘install’ of undefined at Function.Vue.use

ts配置文件

tslint 配置文件

声明全局变量、class、module、function、命名空间

shims-vue.d.ts

  1. declare module "*.vue" {
  2. import Vue from 'vue'
  3. export default Vue
  4. }
  5. declare module 'vue/types/vue' {
  6. interface Vue {
  7. $notify: any
  8. }
  9. }
  10. declare var window: any

shims-tsx.d.ts

  1. import Vue, { VNode } from 'vue';
  2. declare global {
  3. namespace JSX {
  4. // tslint:disable no-empty-interface
  5. interface Element extends VNode {}
  6. // tslint:disable no-empty-interface
  7. interface ElementClass extends Vue {}
  8. interface IntrinsicElements {
  9. [elem: string]: any;
  10. }
  11. }
  12. }

参考:
转转vue接入ts