# 实战:编写 JavaScript 库编写声明文件
本节我们正式开始声明文件的编写实战,因此我们得找一个没有 d.ts 声明的开源库,比较常用但是却用纯 js 编写的库我想到了 events,这个库就是 Node.js 中 events 模块的浏览器和 node 通用版,具体的 API 可见 EventEmitter。
# 搭建环节
我们先把库从 github 上克隆下来
git clone https://github.com/Gozala/events.git && events && npm i
@前端进阶之旅: 代码已经复制到剪贴板
# 如何入手
在根目录下新建一个文件 index.d.ts,我们的声明文件就在这里编写。
为 js 库编写 d.ts 需要我们从两方面入手,一个就是官方的 API 文档,另一个就是库的源码。
events库的API与 Node.js 10.1 的API是一样的,所以我们可以结合Node 10.x的文档编码.
不管是从文档 api 的使用方式还是项目本身的源码都表明,我们主要在使用 events 库暴露出来的一个类 EventEmitter.
var EventEmitter = require('events')
var ee = new EventEmitter()
ee.on('message', function (text) {
console.log(text)
})
ee.emit('message', 'hello world')
@前端进阶之旅: 代码已经复制到剪贴板
因此我们要先声明一个类并导出:
export class EventEmitter {
}
@前端进阶之旅: 代码已经复制到剪贴板
然后我们继续读官方文档,看看这个类暴露出了哪些方法或者属性:
# 静态属性/方法

我们先从最简单的入手,通过文档我们发现这个类暴露出了一个 EventEmitter.defaultMaxListeners 静态属性,通常情况下我们的事件最多注册10个监听器,但是我们可以通过改变 EventEmitter.defaultMaxListeners 来修改这个默认值,很显然这是个 number 类型的静态属性。
