shims-vue.d.ts 解析

 

TypeScript的文檔看起來比較讓人匪夷所思 html

 

TS是從2012年就開始的項目,那時ES6的模塊化尚未成爲繼定標準,因此今天來看TS中一些名詞讓人匪夷所思,其實都是歷史遺留問題vue

 

好比namespace 原來也叫module,是internal module, 而module被稱爲external module,node

 

隨着時間推移和es6模塊化標準的問世, 內部模塊被更名爲了namespace... 官方的handbook沒有提一些歷史遺留的問題,不少東西須要本身本身上網查資料es6

 

或許 這就是微軟把  財大氣粗技術強,隨意造火箭.. vue-cli

 

 

 

研究一下用vue-cli初始化ts項目生成的shims-vue.d.ts:typescript

 

// shims-vue.d.ts模塊化

 

declare module '*.vue' {spa

  import Vue from 'vue';  // 引用了type和valuehtm

(// value是Vue構造器 type是Vue interface)blog

  export default Vue;

}

 

這句話的意思是 聲明一個ambient module(即:沒有內部實現的 module聲明) 

使用了Wildcard module declarations

具體參見: http://www.typescriptlang.org/docs/handbook/modules.html

 

 

在TypeScript編譯器解析 import ‘aaa’ from xxx.vue的時候

 

拿到node_modules/vue/目錄下 index.d.ts 中export default出來的type和value,

 

type是Vue接口

value是 const Vue,這個常量的類型是VueConstructor

 

(圖中是從'vue'中import中獲得的type和 value) 

 

一個import 能同時import到兩個東西,import了一種type 還import了一個value

具體參見:http://www.typescriptlang.org/docs/handbook/declaration-files/deep-dive.html

 

 

 

(當我引用一個vue組件的時候,也拿到了type 和 value)

這裏value是TemplateSearch,類型是Vue構造器

 

使用value:   TemplateSearch. 當點(.) 的時候就能拿到他一些屬性,由於這個值是VueConstructor類型

使用type:     let a:TemplateSearch 就能使用type 這個type是interface Vue

 

 

 

 

 

 

 

 

上面說拿到了node_modules/vue/目錄下index.d.ts中export default出來的type 和 value,那麼咱們來看一下這個東東是什麼:

在index.d.ts下:

export default的東西是從當前vue.d.ts下導出的Vue

 

 

 咱們來看vue.d.ts:

 

23行導出了type Vue, 129行導出了 value Vue 這兩個東西都被export default出來了 當你import的時候 就拿到了這兩個東西,而且改爲了你import的名字。

相關文章
相關標籤/搜索