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模块的声明。

相关推荐
进取星辰24 分钟前
25、Tailwind:魔法速记术——React 19 样式新思路
前端·react.js·前端框架
struggle202542 分钟前
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
javascript·ide·python·typescript·开源
x-cmd1 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星1 小时前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js
crazyme_62 小时前
前端自学入门:HTML 基础详解与学习路线指引
前端·学习·html
撸猫7912 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession
亦世凡华、2 小时前
Rollup入门与进阶:为现代Web应用构建超小的打包文件
前端·经验分享·rollup·配置项目·前端分享
Bl_a_ck3 小时前
【React】Craco 简介
开发语言·前端·react.js·typescript·前端框架
为美好的生活献上中指3 小时前
java每日精进 5.11【WebSocket】
java·javascript·css·网络·sql·websocket·网络协议
augenstern4164 小时前
webpack重构优化
前端·webpack·重构