TypeScript 项目使用 npm 模块
简介
npm 模块都是 JavaScript 代码。即使模块是用 TypeScript 写的,还是必须编译成 JavaScript 再发布,保证模块可以在没有 TypeScript 的环境运行。
问题就来了,TypeScript 项目开发时,加载外部 npm 模块,如果拿不到该模块的类型信息,就会导致无法开发。所以,必须有一个方法,可以拿到模块的类型信息。
有些 npm 模块本身可能包含.d.ts文件甚至完整的 TypeScript 代码。它的package.json文件里面有一个types字段,指向一个.d.ts文件,这就是它的类型声明文件。
{
"name": "left-pad",
"version": "1.3.0",
"description": "String left pad",
"main": "index.js",
"types": "index.d.ts",
// ...
}
如果某个模块没有.d.ts文件,TypeScript 官方和社区就自发为常用模块添加类型描述,可以去官方网站搜索,然后安装网站给出的 npm 类型模块,通常是@types/[模块名]。
$ npm install --save lodash
$ npm install --save @types/lodash
lodash 的类型描述就是@types/lodash的文件index.d.ts。
TS 模块转 npm 模块
TS 代码放在ts子目录,编译出来的 CommonJS 代码放在dist子目录。
如何写 TypeScript 模块
首先,创建模块目录,然后在该目录里面新建一个tsconfig.json。
{
"compilerOptions": {
"module": "commonjs",
"target": "es2015",
"declaration": true,
"outDir": "./dist"
},
"include": ["src/**/*"]
}
"declaration": true:生成 .d.ts 文件,方便其他使用 TypeScript 的开发者加载你的库。"module": "commonjs":编译后的模块格式为commonjs,表示该模块供 Node.js 使用。如果供浏览器使用,则要写成"module": "esnext"。"target": "es2015":生成的 JavaScript 代码版本为 ES2015,需要 Node.js 8 以上版本。"outDir": "./dist":编译后的文件放在./dist目录。include:指定需要编译的文件。
然后,使用 TypeScript 编写仓库代码。可以在src子目录里面,编写一个入口文件index.ts。
最后,编写package.json。
{
"name": "hwrld",
"version": "1.0.0",
"description": "Can log \"hello world\" and \"goodbye world\" to the console!",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"/dist"
]
}
里面的"types": "dist/index.d.ts"字段指定类型声明文件,否则使用这个库的 TypeScript 开发者找不到类型声明文件。files属性指定打包进入 npm 模块的文件。
然后,就是编译和发布。
$ tsc
$ npm publish
参考链接
- How to Write a TypeScript Library, by tsmean
Buy 工具组件将在独立客户端岛中继续迁移。
相关内容
- 体验 阮一峰最新发布的高质量TypeScript教程。教程适合有JavaScript基础的人系统学习TypeScript,并包含了26个章节的内容,涵盖了TypeSc...
- 自述 这是一本关于TypeScript的教程,由知名作者阮一峰编写。教程介绍了TypeScript的基础知识和用法,并包含了最新的TypeScript 5.0版本的更...
- any 类型,unknown 类型,never 类型 any类型关闭类型检查,unknown类型严格版的any。never类型代表不包含任何值的类型。any和unknown是顶层类型,never是唯一的底层类型。使...
- TypeScript 的数组类型 TypeScript数组成员类型必须相同,用T[]表示。数组类型可推断,readonly使数组成为只读。数组是无边界的,不会越界报错。支持多维数组表示。
- TypeScript 的类型断言 TypeScript的类型断言可以绕过类型检查,as可以断言任意类型,as const可缩小类型范围。非空断言!处理空值,断言函数asserts语句明确参数类型...
- TypeScript 基本用法 TypeScript 基本语法包括类型声明、类型推断、编译成 JavaScript 代码等。使用 tsc 编译器把 TS 代码编译成 JS 代码。tsconfi...