TS4类型系统扩展

2024-08-07 22:49:50 浏览数 (1)

一、declare关键字

1、declare关键字

在 TypeScript 中,declare 关键字主要用于声明全局变量、函数、模块、类型别名或枚举,以便在 TypeScript 代码中引用它们,而无需实际定义它们。

  • 声明全局变量或函数

当在 TypeScript 代码中访问某个全局变量或函数,但这个变量或函数并不是在 TypeScript 代码中定义的,而是在 JavaScript 运行时环境中定义的(如浏览器 API)。

代码语言:ts复制
declare var document: any;
declare function alert(message?: any): void;
  • 声明模块

当需要告诉 TypeScript 编译器某个模块存在,但不想(或不能)在 TypeScript 中实际定义它时。

代码语言:ts复制
declare module "party" {
  export function doSomething(): void;
}
  • 声明文件(.d.ts)

在 .d.ts 文件中使用 declare 关键字来定义类型。这些文件被称为声明文件,它们为 TypeScript 提供了关于 JavaScript 代码的额外类型信息。声明文件对于第三方库和框架特别有用,因为它们允许在 TypeScript 中使用这些库和框架,同时保留类型检查的好处。

2、"declaration": true,

在现代 TypeScript 项目中,通常不需要手动声明浏览器或 Node.js 的全局变量和函数,因为 TypeScript 已经内置了这些环境的声明文件(如 lib.dom.d.ts 和 lib.es2015.d.ts)。 在 TypeScript 的配置选项(通常是 tsconfig.json 文件中的选项)中,指定 TypeScript 编译器是否生成相应的 .d.ts 声明文件。这些声明文件包含了 TypeScript 源文件的类型信息,但不包含实现细节。它们的主要用途是允许其他 TypeScript 文件导入和使用这些类型,而无需直接访问实现文件。

二、@types和DefinitelyTyped仓库

DefinitelyTyped是一个高质量的TypeScript类型定义的仓库。通过@types方式来安装常见的第三方JavaScript库的声明适配模块

1、@types:

@types 是一个 npm 上的命名空间,用于托管 TypeScript 的类型声明文件。这些文件通常以 @types/包名 的形式发布,为那些没有自带 TypeScript 类型声明的 JavaScript 库提供类型信息。并且所有通过 @types 安装的类型声明文件都会保存在项目的 node_modules/@types 目录下。

2、DefinitelyTyped 仓库

  • DefinitelyTyped 是一个 GitHub 仓库,由社区维护,提供了大量流行的 JavaScript 代码库的 TypeScript 类型声明文件。
  • 如果你需要使用某个第三方 JavaScript 库,并希望在 TypeScript 中获得类型检查的支持,你可以先在 DefinitelyTyped 仓库中查找是否已经存在对应的类型声明文件。如果找到了,你可以直接使用;如果没有,你也可以参考已有的类型声明文件自己编写一个。
  • DefinitelyTyped 仓库中的类型声明文件通常也是通过 npm 发布到 @types 命名空间下的。

生成packjson.jsonnpm init

安装第三方模块npm i moment

代码语言:js复制
import moment from 'moment'
moment().format('YYYYY')

.ts文件中引入模块,如果模块中有ts声明则可以直接使用,不行是一般通常会有@types/包名 的形式发布的相同模块,为那些没有自带 TypeScript 类型声明的 JavaScript 库提供类型信息

三、lib.d.ts和global.d.ts

1、lib.d.ts

lib.d.ts 文件是 TypeScript 编译器自带的一组核心类型声明文件。这些文件定义了 JavaScript 运行时环境(如浏览器环境或 Node.js 环境)中的全局对象、函数、接口等。当你安装 TypeScript 时,这些文件通常已经包含在TypeScript 安装包中。在浏览器环境中,lib.d.ts 文件会包含 window、document、HTMLElement 等全局对象的类型定义。在 Node.js 环境中,它会包含 process、Buffer、__dirname 等全局对象或变量的类型定义

2、global.d.ts

global.d.ts 文件(或具有类似名称的其他全局声明文件)不是 TypeScript 的一部分,但它们是 TypeScript 社区中广泛使用的一种模式,用于声明全局变量、类型或函数。这些文件通常位于项目的根目录或某个特定的类型声明目录中。要在 TypeScript 项目中使用 global.d.ts 或其他全局声明文件,你需要确保 TypeScript 编译器能够找到它们。这可以通过在 tsconfig.json 中设置 include、files 或 typeRoots 和 types 选项来实现。

0 人点赞