ts的.d.ts和declare究竟是⼲嘛⽤的
⼀、.d.ts是⼲嘛的
.d.ts⽂件是ts⽤来声明变量,模块,type,interface等等的,那在这种后缀的ts⽂件声明这些东西和在纯ts⽂件声明这些东西⼜什么区别呢?
在.d.ts声明变量或者模块等东西之后,在其他地⽅可以不⽤import导⼊这些东西就可以直接⽤,⽤,⽽且有语法提⽰。
但是也不是说创建了.d.ts⽂件,⾥⾯声明的东西就能⽣效了,毕竟归根到底也是.ts⽂件,需要预编译,所以需要在tsconfig.json⽂件⾥⾯的include数组⾥⾯添加这个⽂件
include数组⾥⾯可以不⽤写.d.ts⽂件的绝对路径,可以通过glob通配符,匹配这个⽂件所在的⽂件夹或者是“祖宗级别”⽂件夹。
⽀持的glob通配符有:
* 匹配0或多个字符(不包括⽬录分隔符)
匹配⼀个任意字符(不包括⽬录分隔符)
**/ 递归匹配任意⼦⽬录
⼆、declare是⼲嘛的
.d.ts ⽂件中的顶级声明必须以 "declare" 或 "export" 修饰符开头。
通过declare声明的类型或者变量或者模块,在include包含的⽂件范围内,都可以直接引⽤⽽不⽤去import或者import type相应的变量或者类型。
1.declare声明⼀个类型
declare type Asd {
name: string;
}
在include包含的⽂件范围内可以直接使⽤Asd这个type
2.declare声明⼀个模块
最经典的声明模块应该是这样了
declare module '*.css';
declare module '*.less';
declare module '*.png';
在编辑ts⽂件的时候,如果你想导⼊⼀个.css/.less/.png格式的⽂件,如果没有经过declare的话是会提⽰语法错误的namespace是干嘛的
3.declare声明⼀个变量
这个什么情况下会⽤到呢?假如我在项⽬中引⼊了⼀个sdk,这个sdk(我们以的sdk为例)⾥⾯有⼀些全局的对象(⽐如wx),但是如果不经过任何的声明,在ts⽂件⾥⾯直接⽤wx.config()的话,肯定会报错。
有⼀句说法我蛮喜欢的:declare就是告诉TS编译器你担保这些变量和模块存在,并声明了相应类型,编译的时候不需要提⽰错误!
4.declare声明⼀个作⽤域
declare namespace API {
interface ResponseList {}
}
声明完之后在其他地⽅的ts就可以直接API.ResponseList引⽤到这个接⼝类型
三、注意
1..d.ts⽂件顶级声明declare最好不要跟export同级使⽤,不然在其他ts引⽤这个.d.ts的内容的时候,就需要⼿动import导⼊了
2.在.d.ts⽂件⾥如果顶级声明不⽤export的话,declare和直接写type、interface效果是⼀样的,在其他地⽅都可以直接引⽤
declare type Ass = {
a: string;
}
type Bss = {
b: string;
};
可以直接使⽤Ass和Bss作为某个变量的类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。