typescript 声明文件

作用

1、为已存在js库提供类型信息,这样在ts项目中使用这些库时候,就像用ts一样,会有代码提示、类型保护等机制

2、项目内共享类型:如果多个.ts文件中都用到同一个类型,此时可以创建.d.ts文件提供该类型,实现类型共享。

有哪些

内置的类型声明文件:

TS为JS运行时可用的所有标准化内置API都提供了声明文件

像window、document 等 BOM、DOM API 也都有相应的类型声明

第三方库的类型声明:

正常导入该库,TS就会自动加载库自己的类型声明文件

如何编写类型声明文件

类型声明文件中只能有类型定义 和 类型声明,不能包含其他执行代码

1、实现一个项目内共享类型文件

javascript 复制代码
export type CustomArray = (number | string)[]
export type AddFunc = (a: number, b: number) => void
export interface PersonConfig {
  age: number,
  name: string,
  say(): void
}
// 下面代码会报错
//function add() {
//  console.log(1);
//}

然后再其他用到这些类型的地方引入即可

2、为已存在js库提供类型信息

将js迁移到ts 或者 创建的js库给别人的ts项目使用时候,可以提供类型声明文件
在导入.js文件时,TS会自动加载与.js同名的.d.ts文件,以提供类型声明。

对于let、function等具有双重含义(在JS、TS中都能用),应该使用declare 关键字,明确指定此处用于类型声明。

// 类型提供好以后,需要使用模块化方案中提供的模块化语法,来导出声明好的类型。

// 然后,才能在其他的.ts 文件中使用

// 如果没有导出,即使js文件导出了,但是声明文件没有导出,在ts当中也是没法使用的

javascript 复制代码
// 类型定义并且导出 在需要用到的地方需要导入才能用
export type CustomArray = (number | string)[]
export type AddFunc = (a: number, b: number) => void
export interface PersonConfig {
  age: number,
  name: string,
  say(): void
}

// 类型声明 同文件名会被自动导入 
declare let a: number;
declare function add(a: number): void;

// 类型提供好以后,需要使用模块化方案中提供的模块化语法,来导出声明好的类型。
// 然后,才能在其他的.ts 文件中使用
// 也可以导出 自定义类型(如果需要使用到的话)
export { a, add, CustomArray, AddFunc, PersonConfig }

用法

1、被通过import导入,使用其中暴露的类型定义和变量声明。

2、和相关模块关联,为模块进行类型声明。

对于第二种用法,声明文件如何同相关模块关联呢?

比如有个第三方包名字叫"foo",那么TypeScript会在node_modules/foo中根据其package.json的types和typing字段查找库自带的声明文件 查找到的声明文件被作为该模块的声明文件;

TypeScript也会在node_modules/@types/foo/目录中查找声明文件 ,如果能找到就被作为foo模块的声明文件;

TypeScript还会在我们的项目中查找.d.ts文件,如果遇到declare module 'foo'语句,则该声明被用作foo模块的声明。

相关推荐
花木偶3 分钟前
【郑大二年级信安小学期】Day9:XSS跨站攻击&XSS绕过&CSRF漏洞&SSRF漏洞
前端·xss
FogLetter4 分钟前
节流(Throttle):给频繁触发的事件装上"冷却时间"
前端·javascript
小公主6 分钟前
彻底搞懂 Event Loop!这篇文章帮你一次性吃透宏任务、微任务、执行顺序
前端·javascript
xiaominlaopodaren10 分钟前
爱心动画的数学之美:从心形曲线到粒子系统
前端
AI悦创Python辅导26 分钟前
如何挑选适合项目场景的数据分析工具?
前端
用户92724725021929 分钟前
新闻自动采集并通过API发布到博客
前端·后端
清风920033 分钟前
Logback——日志技术(基础)
java·前端·logback
EndingCoder33 分钟前
排序算法与前端交互优化
开发语言·前端·javascript·算法·排序算法·交互
晓131335 分钟前
JavaScript加强篇——第五章 DOM节点(加强)与BOM
java·开发语言·javascript
三月的一天1 小时前
在 React Three Fiber 中实现 3D 模型点击扩散波效果
前端·react.js·前端框架