美文网首页
在vue中使用typescript - 配置篇

在vue中使用typescript - 配置篇

作者: 有田春雪 | 来源:发表于2019-11-15 17:24 被阅读0次

    以@vue/cli创建的项目

    1. 创建项目的时候, 选择typescript, 会自动添加好typescript
    2. 已有的项目添加typescript, 使用命令vue add typescript, 相关链接

    自行配置webpack的项目

    1. npm下载依赖包
    • 安装 typescript, ts-loader, tslint, tslint-loader, tslint-config-standard, vue-property-decorator
    1. 增加 tsconfig.json
    • vue/cli 中的配置
      {
        "compilerOptions": {
          "target": "esnext",
          "module": "esnext",
          "strict": true,
          "jsx": "preserve",
          "importHelpers": true,
          "moduleResolution": "node",
          "experimentalDecorators": true,
          "esModuleInterop": true,
          "allowSyntheticDefaultImports": true,
          "sourceMap": true,
          "baseUrl": ".",
          "types": [
            "webpack-env"
          ],
          "paths": {
            "@/*": [
              "src/*"
            ]
          },
          "lib": [
            "esnext",
            "dom",
            "dom.iterable",
            "scripthost"
          ]
        },
        "include": [
          "src/**/*.ts",
          "src/**/*.tsx",
          "src/**/*.vue",
          "tests/**/*.ts",
          "tests/**/*.tsx"
        ],
        "exclude": [
          "node_modules"
        ]
      }
    
    1. webpack.base.conf.js 中的配置
      resolve: {
          extensions: ['.js', '.vue', '.json', 'ts', 'tsx'], // 新增了'ts', 'tsx'
          alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': resolve('src'),
          }
        },
        module: {
          rules: [
            {
              test: /\.ts$/,  // 用于加载项目中的ts文件
              exclude: /node_modules/,
              enforce: 'pre',
              loader: 'tslint-loader'
            },
            {
              test: /\.tsx?$/, // 用于加载项目中的tsx文件
              loader: 'ts-loader',
              exclude: /node_modules/,
              options: {
                appendTsSuffixTo: [/\.vue$/],
              }
            }]
    
    1. 重命名main.js
    • 将main.js重命名为main.ts
    • 在webpack.base.conf.js中修改入口的文件名 entry: {app: './src/main.ts'}
    1. 在main.ts同级目录下添加shims-tsx.d.ts 和 shims-vue.d.ts
      // vue/cli中的shims-tsx.d.ts
      // 作用: 为 JSX 语法的全局命名空间
      // 这是因为基于值的元素会简单的在它所在的作用域里按标识符查找
      // 此处使用的是无状态函数组件的方法来定义, 当在tsconfig内开启了jsx语法支持后, 其会自动识别对应的.tsx结尾的文件
      import Vue, { VNode } from 'vue'
      declare global {
        namespace JSX {
          // tslint:disable no-empty-interface
          interface Element extends VNode {}
          // tslint:disable no-empty-interface
          interface ElementClass extends Vue {}
          interface IntrinsicElements {
            [elem: string]: any
          }
        }
      }
    
      // vue/cli中的shims-vue.d.ts
      // 作用:为项目内所有的 vue 文件做模块声明, 毕竟 ts 默认只识别 .d.ts、.ts、.tsx 后缀的文件
      import Vue from "vue";
      import VueRouter, { Route } from "vue-router";
    
      declare module '*.vue' {
        export default Vue
      }
    
      declare module "vue/types/vue" {
        interface Vue {
          $router: VueRouter; // 这表示this下有这个东西
          $route: Route;
          $https: any;
          $urls: any;
          $Message: any;
          $Modal: any;
        }
      }
    
    1. 接下来就可以开发了, 开发的时候依赖 vue-property-decorator
    • 提供了 Vue Component, Prop, PropSync, Model, Watch, Provide, Inject, ProvideReactive, InjectReactive, Emit, Ref API

    相关文章

      网友评论

          本文标题:在vue中使用typescript - 配置篇

          本文链接:https://www.haomeiwen.com/subject/qzmsictx.html