TypeScript-进阶(十)-声明文件

31 阅读2分钟

1.定义

.d.ts结尾的文件,叫做声明文件。
作用:为js代码提供类型声明。
放置的位置:

  • 放置到node_module/@types文件中
  • 放置到typescript.json配置文件指定的文件中
    • include/files指定编译的位置
  • 手动配置,若通过手动配置,则以上两种情况失效
    • 通过配置typeRoots来指定
  • 与JS代码所在目录相同,并且文件名也相同的文件。用ts代码书写的工程发布之后的格式。
    • 即定义了一个index.js文件后,在同一位置定义一个index.d.ts

2.编写

2.1 自动生成

当我们自己用ts编写代码后,进行打包发布后,别人引用我们的包时,希望得到类型提示时,我们可以采用自动生成的方式。
通过typescript.json文件中的declaration进行配置后,打包时会自动生成对应的.d.ts文件;通过配置sourceMap可以生成源码地图文件,用于报错定位调试

{
  "compilerOptions": {
    "declaration": true, // 用于启用打包自动生成.d.ts声明文件
    "sourceMap": true, // 用于启用打包生成sourceMap源码地图,用于报错调试
  },
  "include": [ // 编译哪个目录
    "./src"
  ],
  // "files": ["./src/index.ts"] // 表示仅编译index.ts这个文件
}

image.png

2.2 手动编写

当我们使用第三方库时,其没有提供对应的声明文件时,我们可以通过手动编写声明文件来实现。
可以在上面提到的放置位置进行编写
当我们把@type/node删除掉后,node环境下的setInterval、log就没有了声明文件

image.png

image.png

2.2.1 全局声明文件
declare var console: {
    log(message: string): void
}
2.2.2 命名空间
declare namespace console {
    function log(message?: string): void
}

当我们使用lodash第三方库开发时,会出现没有声明,我们可以手动进行模块化声明

image.png

import _ from 'lodash'

const a = _.chunk([1, 2, 3, 3], 2)

declare module 'lodash' {
    function chunk<T>(arr: T[], n: number): T[][]
}

3.三斜线指令

在一个声明文件中引入另一个声明文件

/// <reference path="./other.d.ts" />