在vue中使用typescript - 配置篇

以@vue/cli創(chuàng)建的項目

  1. 創(chuàng)建項目的時候, 選擇typescript, 會自動添加好typescript
  2. 已有的項目添加typescript, 使用命令vue add typescript, 相關(guān)鏈接

自行配置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 語法的全局命名空間
  // 這是因為基于值的元素會簡單的在它所在的作用域里按標(biāo)識符查找
  // 此處使用的是無狀態(tài)函數(shù)組件的方法來定義, 當(dāng)在tsconfig內(nèi)開啟了jsx語法支持后, 其會自動識別對應(yīng)的.tsx結(jié)尾的文件
  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
  // 作用:為項目內(nèi)所有的 vue 文件做模塊聲明, 畢竟 ts 默認(rèn)只識別 .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. 接下來就可以開發(fā)了, 開發(fā)的時候依賴 vue-property-decorator
  • 提供了 Vue Component, Prop, PropSync, Model, Watch, Provide, Inject, ProvideReactive, InjectReactive, Emit, Ref API
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末殷勘,一起剝皮案震驚了整個濱河市妖胀,隨后出現(xiàn)的幾起案子汽纠,更是在濱河造成了極大的恐慌,老刑警劉巖怜庸,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馏鹤,死亡現(xiàn)場離奇詭異砖织,居然都是意外死亡款侵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門侧纯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來新锈,“玉大人,你說我怎么就攤上這事眶熬『攫模” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵聋涨,是天一觀的道長。 經(jīng)常有香客問我负乡,道長牍白,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任抖棘,我火速辦了婚禮茂腥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘切省。我一直安慰自己最岗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布朝捆。 她就那樣靜靜地躺著般渡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芙盘。 梳的紋絲不亂的頭發(fā)上驯用,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音儒老,去河邊找鬼蝴乔。 笑死,一個胖子當(dāng)著我的面吹牛驮樊,可吹牛的內(nèi)容都是我干的薇正。 我是一名探鬼主播片酝,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挖腰!你這毒婦竟也來了雕沿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤曙聂,失蹤者是張志新(化名)和其女友劉穎晦炊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宁脊,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡断国,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榆苞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稳衬。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坐漏,靈堂內(nèi)的尸體忽然破棺而出薄疚,到底是詐尸還是另有隱情,我是刑警寧澤赊琳,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布街夭,位于F島的核電站,受9級特大地震影響躏筏,放射性物質(zhì)發(fā)生泄漏板丽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一趁尼、第九天 我趴在偏房一處隱蔽的房頂上張望埃碱。 院中可真熱鬧,春花似錦酥泞、人聲如沸砚殿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽似炎。三九已至,卻和暖如春悯姊,著一層夾襖步出監(jiān)牢的瞬間名党,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工挠轴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留传睹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓岸晦,卻偏偏與公主長得像欧啤,于是被迫代替她去往敵國和親睛藻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Vue-Webpack-TypeScript 這是一個Vue2.5+版本兼容TypeScript開發(fā)的腳手架邢隧,雖然...
    Jacky_MYD閱讀 2,757評論 0 14
  • 開發(fā)工具 vscode 眾所周知店印,vue2+Typescript的開發(fā)體驗很不好,不過為了嘗鮮倒慧,咱還是可以搭一個小...
    北辰_狼月閱讀 1,410評論 1 11
  • 整理自:三命:Vue + TypeScript 新項目起手式最新版:Vue-cli 整合 Typescript 筆...
    六毫笙閱讀 2,014評論 1 2
  • 心理學(xué)家海因茨·科胡特說:“一個功能良好的心理結(jié)構(gòu)纫谅,最重要的來源是父母的人格炫贤,特別是他們以不帶敵意的堅決和不含誘惑...
    y詩淇閱讀 61評論 0 0
  • 生活在海邊的人,每天面對大海付秕,不覺新鮮兰珍;生活在大山里的人,開門見山询吴,平淡無奇掠河。但是總會有人慕名而來,看山看海...
    正版云傾閱讀 161評論 0 2