两行命令! 搞定vue+typescript配置

建立一个空的vue项目

vue create ts_demo

复制代码

添加 typescript插件

vue add @vue/typescript

yarn run serve // 启动项目
复制代码

打开文件目录能够看到如今的目录结构是这样的html

能够看到全部的js文件被编译成了ts文件,还新增了tsconfig.json ,shims-tsx.d.ts, shims-vue.d.tsvue

tsconfig.json 默认配置

tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项, 更多编译选项能够参考 more-optionsnode

{
  "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"
  ]
}

复制代码

shims-tsx-d-ts

容许以 .tsx 结尾的文件,在 Vue 项目中编写 jsx 代码webpack

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
    }
  }
}

复制代码

shims-vue.d.ts

主要用于 TypeScript 识别 .vue 文件, Ts 默认并不支持导入 vue 文件,这个文件告诉 ts 导入 .vue 文件都按 VueConstructor 处理。git

declare module '*.vue' {
  import Vue from 'vue'
  export default Vue
}

复制代码

App.vue文件

主要变化体如今script模块,能够看到typescript插件自动加载了vue-property-decoratorgithub

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from './components/HelloWorld.vue';

@Component({
  components: {
    HelloWorld,
  },
})
export default class App extends Vue {}
</script>
复制代码
相关文章
相关标签/搜索