Typescript基础:如何更好的生成Typescript声明文件.d.ts

简介: Typescript已经被前端广泛使用,如果你的项目还没有使用,建议赶紧使用起来,真的会对你的项目有足够的提升

背景


Typescript已经被前端广泛使用,如果你的项目还没有使用,建议赶紧使用起来,真的会对你的项目有足够的提升:

  • 让你的每个变量都有变量声明
  • 让你的每个方法找到其源头
  • 让你能提前使用一些超前的JavaScript语法,如:注解(装饰器)@controller 等语法糖


但是使用的过程也会带来一些痛苦,比如你要做一个js lib库,如果用Typescript 开发确实可以帮助其他者快速使用,但是如果你没有注意Typescript的声明文件规范,很容易出现以下使用情况:

// 会直接从src目录去寻找
import { IClient } from 'xxx-lib/src/client.d.ts'
// 而我们所期待的使用是
import { IClient} from 'xxx-lib'

所以我们需要学习一下,如何更好的生成我们的Typescript声明文件。

Typescript声明文件


声明文件:当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。

从官网定义而言,声明文件.d.ts就是用来给IDE编辑器解析Typescript代码声明的地方。

学习声明


目前Typescript提供各种类型,我们常用的有以下几种:

  • declare var 声明全局变量,如:declare var jQuery: (selector: string) => any; ,我们就可以在全局中使用jQuery 变量而不会报错
  • declare function 声明全局方法
  • declare class 声明全局类
  • declare enum 声明全局枚举类型
  • declare namespace 声明(含有子属性的)全局对象
  • interfacetype 声明全局类型


其中,declare基本上都根据Typescript 中会自动生成,而interfacetype则需要我们自己声明,自己使用。

生成声明文件


当你完成一个lib库开发,这个时候需要对外提供你声明文件,如:import foo from 'foo'


如果你需要对自己的npm包制作声明文件,具体有以下几个步骤:

1.在package.json中的typestypings ,如:"types":"dist/typings/index.d.ts"

2.在项目根目录创建typings ,新建一个index.d.ts 用来暴露你lib库相关的声明

3.在typescript.json配置文件中,添加入口,如:"includes":["./typings/index.d.ts"]


PS:typestypings 两者在package.json具有相同意义

package.json示例如下:

{
  "name": "@node-gptcommit/git-utils",
  "version": "1.0.0",
  "description": "关于git的一些工具函数",
  "main": "dist/index.js",
  "types": "./dist/typings/index.d.ts",
  "typings": "./dist/typings/index.d.ts",
  "type": "module",
  "scripts": {
    "build": "tsc -p tsconfig.release.json --outDir dist && cp -r typings dist"
  },
  "devDependencies": {
    "@types/node": "^16",
    "tslib": "^2.2.0",
    "typescript": "^4.7.2"
  },
  "dependencies": {
    "simple-git": "^3.17.0"
  },
  "author": "qborfy",
  "license": "MIT"
}

typescript.json 示例如下:

{
  "include": [
    "src/*",
    "typings/index.d.ts"
  ],
  "compilerOptions": {
    "baseUrl": ".",
    "rootDir": ".",
    "target": "ES2019",
    "module": "ESNext",
    "moduleResolution": "node",
    "strict": true,
    "esModuleInterop": true,
    "noImplicitOverride": true,
    "noUnusedLocals": true,
    "useUnknownInCatchVariables": false,
    "declaration": true,
    "declarationDir": "dist"
  },
  "exclude": ["node_modules"]
}

index.d.ts实现


前面基本知道Typescript声明和如何在package.json标注好当前npm包会使用哪个声明文件,那么接下来,我们应该如何一个index.d.ts,主要靠以下几个:

  • export 导出变量
  • export namespace 导出(含有子属性的)对象
  • export default ES6 默认导出
  • export = commonjs 导出模块


PS: 只有只有 functionclassinterface 支持export default

index.d.ts示范:

// index.d.ts
// 将src中的声明文件引入过来
export * from '../src/index';
// 导出声明的函数
export declare function bar(): string;

使用demo.js示范:

//demo.js
// 使用就如下 bar就是一个函数
import { bar } from 'libs'
bar();

发布


发布声明文件一般有两种做法:

  • 一种是发布到@types/xxx ,在types目录下新建一个package.json去维护,不推荐
  • 另外一种是和npm包一起发布,目前基本上大多数都采用这种,本文也使用采用这种

参考资料


目录
相关文章
|
6月前
|
JavaScript 前端开发 程序员
总结TypeScript 的一些知识点:TypeScript 声明文件
程序来输出 "Hello World" :当然,很多流行的第三方库的声明文件不需要我们定义了,比如 jQuery 已经有人帮我们定义好
总结TypeScript 的一些知识点:TypeScript 声明文件
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
130 0
|
6月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
336 0
|
3月前
|
JavaScript IDE 开发工具
|
5月前
|
JavaScript 前端开发 IDE
TypeScript中的声明文件(.d.ts):扩展类型系统
TypeScript的`.d.ts`声明文件为JS库提供类型信息,增强IDE支持,如自动完成和类型检查。通过声明合并,可在全局作用域定义类型。示例包括为`my-library`创建声明模块,导出函数和接口。声明文件通常存于`@types`或指定`typeRoots`。用于旧JS代码的类型注解,如`myGlobalObject`。学习更多,参阅TypeScript官方文档。分享你的TS声明文件经验!
179 1
|
6月前
|
JavaScript 前端开发 编译器
如何编译Typescript文件?
如何编译Typescript文件?
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
58 0
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
|
6月前
|
JavaScript
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(上)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
76 0
|
6月前
|
JavaScript 前端开发 编译器
TypeScript进阶(四)声明文件
TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的超集,为 JavaScript 添加了静态类型检查和其他一些特性。TypeScript 的声明文件是一种特殊的文件,用于描述 JavaScript 库、框架或模块的类型信息。通过声明文件,我们可以在 TypeScript 中使用第三方 JavaScript 库,并获得类型检查和智能提示的好处。 本文将深入探讨 TypeScript 声明文件的相关概念、语法和实践,帮助读者更好地理解和使用声明文件。
71 0
|
1月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
48 0