declaration-files
语法
declare var声明全局变量declare function声明全局方法declare class声明全局类declare enum声明全局枚举类型declare namespace声明(含有子属性的)全局对象interface和type声明全局类型export导出变量export namespace导出(含有子属性的)对象export defaultES6 默认导出export =commonjs 导出模块export as namespaceUMD 库声明全局变量declare global扩展全局变量declare module扩展模块/// <reference />三斜线指令
declare module
declare module扩展原有模块的声明
/// <reference />
/// <reference />只有单行或多行注释包括其它三斜线指令可以在三斜线指令之前
/// <reference path="...">
/// <reference path="...">声明对另一个文件的依赖
/// <reference types="...">
/// <reference types="...">声明对另一个库的依赖,类似于声明文件中的 import
对于在编译期生成的声明文件,编译器将自动为你添加/// <reference types="..." />。当且仅当生成的文件使用引用包中的任何声明时,才会在生成的声明文件中添加/// <reference types="..." />。
与import区别
仅当在以下场景下,我们才需要使用三斜线指令替代import
当我们在书写一个全局变量的声明文件时
当我们需要依赖一个全局变量的声明文件时
当我们在书写一个全局变量的声明文件时
在全局变量的声明文件中,是不允许出现 import, export 关键字的。一旦出现了,那么他就会被视为一个 npm 包或 UMD 库,就不再是全局变量的声明文件了。故当我们在书写一个全局变量的声明文件时,如果需要引用另一个库的类型,那么就必须用三斜线指令了
依赖一个全局变量的声明文件
当我们需要依赖一个全局变量的声明文件时,由于全局变量不支持通过 import 导入,当然也就必须使用三斜线指令来引入了
https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html
自动生成声明文件
如果库的源码本身就是由 ts 写的,那么在使用 tsc 脚本将 ts 编译为 js 的时候,添加 declaration 选项,就可以同时也生成 .d.ts 声明文件了。
我们可以在命令行中添加 --declaration(简写 -d),或者在 tsconfig.json 中添加 declaration 选项。这里以 tsconfig.json 为例:
上例中我们添加了 outDir 选项,将 ts 文件的编译结果输出到 lib 目录下,然后添加了 declaration 选项,设置为 true,表示将会由 ts 文件自动生成 .d.ts 声明文件,也会输出到 lib 目录下。
运行 tsc 之后,目录结构如下:
发布
有两种方式发布你的声明文件到npm
与你的npm包捆绑在一起
发布到@types下
如果使用Typescript编写模块,首选第一种方式。使用--declaration标识文件来生成声明文件
声明文件包含在源码里
需要在package.json文件里设置types或typings属性指定声明文件地址
若声明文件命名为index.d.ts,可不指定types或typings属性
所有依赖包的声明文件需要在dependencies指定
建议
不要使用
推荐使用
Last updated
Was this helpful?