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

相关推荐
笨笨狗吞噬者14 分钟前
【uniapp】解决小程序分包下的json文件编译后生成到主包的问题
前端·uni-app
IT_陈寒28 分钟前
Redis 7个性能优化技巧,让我们的QPS从5k提升到20k+
前端·人工智能·后端
.又是新的一天.1 小时前
健身房预约系统SSM+Mybatis(五、预约展示)
前端·mybatis
晴殇i1 小时前
DOM嵌套关系全解析:前端必备的4大判断方法与性能优化实战
前端·javascript·面试
字节拾光1 小时前
console.log 打印 DOM 后内容变了?核心原因是 “引用” 而非 “快照”
javascript
似水流年_zyh1 小时前
canvas涂抹,擦除功能组件
前端
胖虎2651 小时前
前端多文件上传核心功能实现:格式支持、批量上传与状态可视化
前端
胖虎2651 小时前
Vue2 项目常用配置合集:多语言、SVG 图标、代码格式化、权限指令 + 主题切换
前端
一键定乾坤2 小时前
npm 源修改
前端
parade岁月2 小时前
Vue 3 响应式陷阱:对象引用丢失导致的数据更新失效
前端