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

相关推荐
BillKu15 小时前
Vue3应用执行流程详解
前端·javascript·vue.js
欧阳天风15 小时前
链表运用到响应式中
javascript·数据结构·链表
Codebee15 小时前
OneCode 移动套件多平台适配详细报告
前端·人工智能
你知唔知咩系timing啊15 小时前
🎙️ 站在巨人肩膀上:基于 SenseVoice.cpp 的前端语音识别实践
前端
一位搞嵌入式的 genius15 小时前
前端开发核心技术与工具全解析:从构建工具到实时通信
前端·笔记
littleplayer15 小时前
Redux 中›ABC三个页面是如何通信的?
前端
安卓开发者15 小时前
鸿蒙NEXT的Web组件网络安全与隐私保护实践
前端·web安全·harmonyos
程序员NEO15 小时前
3分钟搞定Vue组件库
前端
程序员NEO15 小时前
WebStorm代码一键美化
前端
前端农民工ws15 小时前
Vue 框架的 markdown 渲染组件,针对 AI 的 markdown 流式传输场景
前端·javascript·vue.js·ai