TS的声明文件
admin
2024-03-08 06:06:02
0

TS的声明文件


.ts文件:

既包含类型信息又可执行代码。可以被编译成 .js 文件。

.d.ts文件:

只包含类型信息的类型声明文件。不会生成 .js 文件,仅用于提供类型信息。

.ts是implementation(代码实现文件).d.ts是declaration(类型声明文件)

ts的代码最后会编译成 .js 的 js 代码供他人使用,这个时候,类型信息就丢失了。

所以 ts 编译器会自动根据 .ts 中的信息,生成对外的 .d.ts 文件,和生成的 js 文件搭配使用。

其中,js 文件是给运行引擎用的,而 .d.ts 文件是给 IDE(智能编辑器)写代码时参考用的。

如果要为 JS 库提供类型信息,要用 .d.ts 文件。




TS声明文件类型.d.ts


DEFINITELYTYPED社区已定义

 npm install @types/jquery --save-dev

与NPM一同发布,package.json 中有 types 字段,或者有一个 index.d.ts 声明文件


自己编写

创建一个 node_modules/@types/foo/index.d.ts 文件,存放foo 模块的声明文件。不太建议用这种方案,一般只用作临时测试。

创建一个 types 目录,专门用来管理自己写的声明文件,将 foo 的声明文件放到 types/foo/index.d.ts 中。这种方式需要配置下tsconfig.json 中的 pathsbaseUrl字段。

  /path/to/project├── src|  └── index.ts├── types|  └── foo|     └── index.d.ts└── tsconfig.json
{"compilerOptions": {"module": "commonjs","baseUrl": "./","paths": {"*": ["types/*"]}}
}



TS声明文件定义类型

全局定义

let

declare let jQuery: (selector: string) => any;

function

declare function jQuery(selector: string): any;

class

declare class Animal {name: string;constructor(name: string);sayHi(): string;
}

enum

declare enum Directions {Up,Down,Left,Right
}

namespace

declare namespace jQuery {function ajax(url: string, settings?: any): void;namespace fn {function extend(object: any): void;}
}



NPM包型 - EXPORT

// types/foo/index.d.ts
export const name: string;
export function getName(): string;
export class Animal {constructor(name: string);sayHi(): string;
}
export enum Directions {Up,Down,Left,Right
}
export interface Options {data: any;
}
export namespace foo {const name: string;namespace bar {function baz(): string;}
}



NPM包型 - EXPORT DEFAULT

// types/foo/index.d.ts
// function、class 和 interface 可以直接默认导出,其他的变量需要先定义出来,再默认导出
export default function foo(): string;export default Directions;
declare enum Directions {Up,Down,Left,Right
}



NPM包型 - 先声明,在EXPORT

// types/foo/index.d.ts
declare const name: string;
declare function getName(): string;
declare class Animal {constructor(name: string);sayHi(): string;
}
declare enum Directions {Up,Down,Left,Right
}
// interface 前是不需要 declare
interface Options {data: any;
}export { name, getName, Animal, Directions, Options };

注:
.d.ts文件顶级声明declare最好不要跟export同级使用,不然在其他ts引用这个.d.ts的内容的时候,就需要手动import导入了

.d.ts文件里如果顶级声明不用export的话,declare和直接写type、interface效果是一样的,在其他地方都可以直接引用




MODULE 拓展

// types/foo-bar.d.tsdeclare module 'foo' {export interface Foo {foo: string;}
}declare module 'bar' {export function bar(): string;
}
// src/index.ts
import { Foo } from 'foo';
import * as bar from 'bar';let f: Foo;
bar.bar();



三斜线指令

书写一个全局变量的声明文件
依赖一个全局变量的声明文件

在声明文件中使用/// 头,来引入依赖的其它声明。

// types/jquery-plugin/index.d.ts/// declare function foo(options: JQuery.AjaxSettings): string;



TS文件TSC自动生成声明文件

命令行参数

--declaration(简写 -d)

tsconfig.json

{"compilerOptions": {"module": "commonjs","outDir": "lib","declaration": true,}
}



TS发布

发布到社区

@types 是统一由 DefinitelyTyped 管理的。要将声明文件发布到 @types 下,就需要给 DefinitelyTyped 创建一个 pull-request,其中包含了类型声明文件,测试代码,以及 tsconfig.json 等。

与源码一起(依次查找*.d.ts)

  1. 给 package.json 中的 types 或 typings 字段指定一个类型声明文件地址
  2. 在项目根目录下,编写一个 index.d.ts 文件
  3. 针对入口文件(package.json 中的 main 字段指定的入口文件),编写一个同名不同后缀的 .d.ts 文件

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...