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或多个字符(不包括目录分隔符)

? 匹配一个任意字符(不包括目录分隔符)

**/ 递归匹配任意子目录

具体tsconfig.json配置请看这tsconfig.json · TypeScript中文网 · TypeScript——JavaScript的超集

二、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的话是会提示语法错误的

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作为某个变量的类型

博客迁移至:ts的.d.ts和declare究竟是干嘛用的 - 掘金

TypeScript 中的 declare 关键字用于声明某些变量、函数或类的类型,但并不实际定义它们的实现。这是因为 TypeScript 可以用来编写 JavaScript,而 JavaScript 中的许多变量、函数或类并没有明确定义它们的类型。因此,使用 declare 关键字可以帮助 TypeScript 理解这些 JavaScript 代码的类型。 declare 关键字的使用有以下几种情况: 1. 声明全局变量或函数 在 TypeScript 中,全局变量或函数应该在任何文件中都可以访问。但如果这些变量或函数没有明确定义类型,则 TypeScript 编译器可能无法正确解析它们的类型。因此,使用 declare 关键字可以告诉编译器这些变量或函数的类型。 例如,以下代码声明了一个全局变量 message,并指定它的类型为字符串: ``` declare var message: string; ``` 2. 声明模块 在 TypeScript 中,可以使用 declare 关键字来声明模块的类型。例如,以下代码声明了一个名为 MyModule 的模块,并指定它包含一个名为 myFunction 的函数: ``` declare module MyModule { function myFunction(): void; } ``` 3. 声明类的类型 在 TypeScript 中,可以使用 declare 关键字来声明一个类的类型,而不实际定义它的实现。这通常用于与第三方库集成时,以便编译器知道这些类的类型。 例如,以下代码声明了一个名为 MyLibrary 的类,并指定它包含一个名为 myFunction 的方法: ``` declare class MyLibrary { myFunction(): void; } ``` 需要注意的是,使用 declare 关键字并不会实际生成任何代码,它只是告诉编译器这些变量、函数或类的类型。因此,如果使用 declare 关键字声明一个变量、函数或类的类型,就必须确保在代码中正确地实现它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值