vue3+vue-cli3 與 typeScript 的引入與混入

前言:

TypeScript的設計目的應該是解決JavaScript的“痛點”:弱類型和沒有命名空間,導致很難模塊化权逗,不適合開發(fā)大型程序。另外它還提供了一些語法糖來幫助大家更方便地實踐面向對象的編程毅往。---- 引入

[TypeScript官方文檔地址](https://www.tslang.cn/docs/home.html)

主題:

第一步漾稀、安裝依賴:

npm、cnpm腾节、yarn都支持

npm install typescript ts-loader --save-dev

npm install vue-property-decorator --save-dev

第二步忘嫉、配置vue.config.js 打包與啟動:

```javascript

module.exports = {

? ? publicPath: './',

? ? configureWebpack: config => {

? ? ? ? config.externals = {

? ? ? ? ? // 混入ts↓

? ? ? ? ? ? resolve: { extensions: [".ts", ".tsx", ".js", ".json"] },

? ? ? ? ? ? // 使用ts后改變入口文件

? ? ? ? ? ? base: {

? ? ? ? ? ? ? ? entry: {

? ? ? ? ? ? ? ? app: resolve('src/main.ts') // 把main.js改為main.ts

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? resolve: {

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

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? module: {

? ? ? ? ? ? ? ? ? ? rules: [

? ? ? ? ? ? ? ? ? ? ? ? {

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? loader: 'ts-loader',

? ? ? ? ? ? ? ? ? ? ? ? ? ? exclude: /node_modules/,

? ? ? ? ? ? ? ? ? ? ? ? ? ? options: {

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // 混入ts結束??

? ? ? ? ? ? }

? ? ? ? }

```

第三步荤牍、新建tsconfig.json放在項目根目錄(與packge.json同級):

```javascript

{

? "compilerOptions": {

? ? "target": "es5", // 編譯目標平臺

? ? "outDir": "./dist/", // 輸出目錄

? ? "module": "commonjs", // 指定生成哪個模塊系統(tǒng)代碼

? ? "noImplicitAny": false, // 在表達式和聲明上有隱含的any類型時報錯

? ? "removeComments": true, // 移除注釋

? ? "pretty": true,

? ? "strict": true,

? ? "importHelpers": true,

? ? "moduleResolution": "node", // 模塊的解析

? ? "experimentalDecorators": true, // 啟用裝飾器

? ? "esModuleInterop": true,

? ? "allowSyntheticDefaultImports": true,

? ? "sourceMap": true, // 把 ts 文件編譯成 js 文件的時候,同時生成對應的 map 文件

? ? "baseUrl": "./", // 指定基礎目錄

? ? "allowJs": true, // 允許編譯javascript文件

? ? "noEmit": true,

? ? // "types": [

? ? //? "webpack-env"

? ? // ],

? ? "paths": {

? ? ? "@/*": [

? ? ? ? "src/*"

? ? ? ]

? ? },

? ? // 添加需要的解析的語法庆冕,否則TS會檢測出錯康吵。

? ? "lib": [

? ? ? "esnext",

? ? ? "dom",

? ? ? "dom.iterable",

? ? ? "scripthost"

? ? ]

? },

? "include": [

? ? "src/**/*",

? ? "types"

? ],

? "exclude": [

? ? "node_modules"

? ]

}

```

如果一個目錄下存在一個tsconfig.json文件,那么它意味著這個目錄是TypeScript項目的根目錄访递。 tsconfig.json文件中指定了用來編譯這個項目的根文件和編譯選項晦嵌。 一個項目可以通過以下方式之一來編譯:

使用tsconfig.json

1. 不帶任何輸入文件的情況下調用tsc,編譯器會從當前目錄開始去查找tsconfig.json文件力九,逐級向上搜索父目錄。

2. 不帶任何輸入文件的情況下調用tsc邑闺,且使用命令行參數(shù)--project(或-p)指定一個包含tsconfig.json文件的目錄跌前。

當命令行上指定了輸入文件時,tsconfig.json文件會被忽略陡舅。

以上配置應該是目前最全的配置了抵乓。

第四步、聲明文件:

舉例 : 使用swipe

新建聲明文件shims-vue.d.ts放在根目錄:

```javascript

declare module 'vue-awesome-swiper' {

? export const Swiper: any

? export const SwiperSlide: any

}

```

這個主要的作用是聲明vue外部引入的組件庫等靶衍。

第五步灾炭、新建sfc.d.ts 全局vue聲明文件:

```javascript

/**

* 告訴 TypeScript *.vue 后綴的文件可以交給 vue 模塊來處理

* 而在代碼中導入 *.vue 文件的時候,需要寫上 .vue 后綴颅眶。

* 原因還是因為 TypeScript 默認只識別 *.ts 文件蜈出,不識別 *.vue 文件

*/

declare module "*.vue" {

? import Vue from 'vue'

? export default Vue

}

/**

* 告訴 TypeScript window是個全局對象,直接可用涛酗,這樣就不會在window.xx = 123時報錯

*/

declare var window: any

/**

* 引入部分第三方庫/自己編寫的模塊的時候需要額外聲明文件

* 引入的時候铡原,需要使用類似 import VueLazyLaod from 'vue-lazyload' 的寫法

*/

// 例子:

// declare module 'vue-lazyload'

// declare module '@zz/perf/vue'

// declare module 'raven-js'

// declare module 'raven-js/plugins/vue'

```

第六步、總結:

總體來說商叹,無論是初始項目引入燕刻,或是已有項目混入ts都是比較友好的。

比如配置適配js文件后剖笙,可以逐個文件慢慢改卵洗。

但開發(fā)中的項目引入ts我建議先不要使用main.ts當入口文件

可以優(yōu)先改寫vue中的ts寫法

在vue中引入ts:

```javascript

<script lang="ts">

//內容

</script>

```

待項目基本改寫完成,最后更改main.js弥咪。

以上

全文完

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末过蹂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子聚至,更是在濱河造成了極大的恐慌榴啸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晚岭,死亡現(xiàn)場離奇詭異鸥印,居然都是意外死亡勋功,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門库说,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂鞋,“玉大人,你說我怎么就攤上這事潜的∩ё幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵啰挪,是天一觀的道長信不。 經常有香客問我,道長亡呵,這世上最難降的妖魔是什么抽活? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮锰什,結果婚禮上下硕,老公的妹妹穿的比我還像新娘。我一直安慰自己汁胆,他們只是感情好梭姓,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫩码,像睡著了一般誉尖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铸题,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天释牺,我揣著相機與錄音,去河邊找鬼回挽。 笑死没咙,一個胖子當著我的面吹牛,可吹牛的內容都是我干的千劈。 我是一名探鬼主播祭刚,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墙牌!你這毒婦竟也來了涡驮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤喜滨,失蹤者是張志新(化名)和其女友劉穎捉捅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虽风,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡棒口,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年寄月,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片无牵。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡漾肮,死狀恐怖,靈堂內的尸體忽然破棺而出茎毁,到底是詐尸還是另有隱情克懊,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布七蜘,位于F島的核電站谭溉,受9級特大地震影響,放射性物質發(fā)生泄漏橡卤。R本人自食惡果不足惜扮念,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜魄。 院中可真熱鬧扔亥,春花似錦场躯、人聲如沸谈为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伞鲫。三九已至,卻和暖如春签舞,著一層夾襖步出監(jiān)牢的瞬間秕脓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工儒搭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吠架,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓搂鲫,卻偏偏與公主長得像傍药,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子魂仍,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354