背景
Typescript已经被前端广泛使用,如果你的项目还没有使用,建议赶紧使用起来,真的会对你的项目有足够的提升:
- 让你的每个变量都有变量声明
- 让你的每个方法找到其源头
- 让你能提前使用一些超前的JavaScript语法,如:注解(装饰器)
@controller
等语法糖
但是使用的过程也会带来一些痛苦,比如你要做一个js lib库,如果用Typescript
开发确实可以帮助其他者快速使用,但是如果你没有注意Typescript的声明文件规范,很容易出现以下使用情况:
1 | // 会直接从src目录去寻找 |
所以我们需要学习一下,如何更好的生成我们的Typescript声明文件。
Typescript声明文件
声明文件:当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。
从官网定义而言,声明文件.d.ts
就是用来给IDE编辑器解析Typescript
代码声明的地方。
学习声明
目前Typescript提供各种类型,我们常用的有以下几种:
declare var
声明全局变量,如:declare var jQuery: (selector: string) => any;
,我们就可以在全局中使用jQuery
变量而不会报错declare function
声明全局方法declare class
声明全局类declare enum
声明全局枚举类型declare namespace
声明(含有子属性的)全局对象interface
和type
声明全局类型
其中,declare
基本上都根据Typescript
中会自动生成,而interface
和type
则需要我们自己声明,自己使用。
生成声明文件
当你完成一个lib库开发,这个时候需要对外提供你声明文件,如:import foo from 'foo'
如果你需要对自己的npm包
制作声明文件,具体有以下几个步骤:
- 在
package.json
中的types
和typings
,如:"types":"dist/typings/index.d.ts"
- 在项目根目录创建
typings
,新建一个index.d.ts
用来暴露你lib库相关的声明 - 在
typescript.json
配置文件中,添加入口,如:"includes":["./typings/index.d.ts"]
PS: types
和typings
两者在package.json具有相同意义
package.json
示例如下:
1 | { |
typescript.json
示例如下:
1 | { |
index.d.ts实现
前面基本知道Typescript声明和如何在package.json标注好当前npm包会使用哪个声明文件,那么接下来,我们应该如何一个index.d.ts,主要靠以下几个:
export
导出变量export namespace
导出(含有子属性的)对象export default
ES6 默认导出export =
commonjs 导出模块
PS: 只有只有 function
、class
和 interface
支持export default
index.d.ts
示范:
1 | // index.d.ts |
使用demo.js
示范:
1 | //demo.js |
发布
发布声明文件一般有两种做法:
- 一种是发布到
@types/xxx
,在types
目录下新建一个package.json
去维护,不推荐 - 另外一种是和
npm包
一起发布,目前基本上大多数都采用这种,本文也使用采用这种
参考资料
- 本文作者: Qborfy
- 本文链接: https://www.qborfy.com/today/20230226.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!