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的名字。

相关文章
相关标签/搜索