【TypeScript入坑】TypeScript 的declare关键字、d.ts类型声明文件


declare关键字

declare 关键字用来告诉编译器,某个类型是存在的,可以在当前文件中使用。

它的主要作用,就是让当前文件可以使用其他文件声明的类型

🌰 举例来说,自己的脚本使用外部库定义的函数,编译器会因为不知道外部函数的类型定义而报错,这时就可以在自己的脚本里面使用 declare 关键字,告诉编译器外部函数的类型。这样的话,编译单个脚本就不会因为使用了外部类型而报错。

declare 关键字可以描述以下类型:

  • 变量(constletvar 命令声明)
  • type 或者 interface 命令声明的类型
  • class
  • enum
  • 函数(function
  • 模块(module
  • 命名空间(namespace

d.ts类型声明文件

简介

单独使用的模块,一般会同时提供一个单独的类型声明文件declaration file),把本模块的外部接口的所有类型都写在这个文件里面,便于模块使用者了解接口,也便于编译器检查使用者的用法是否正确。

🌰 举例,一个模块有代码如下:

const maxInterval = 12;

function getArrayLength(arr) {
  return arr.length;
}

module.exports = {
  getArrayLength,
  maxInterval,
};

👇 那么它的类型声明文件可以写成下面的形式

export function getArrayLength(arr: any[]): number;
export const maxInterval: 12;

类型声明文件的来源

类型声明文件主要有以下三种来源。

  • TypeScript 编译器自动生成。
  • TypeScript 内置类型文件。
  • 外部模块的类型声明文件,需要自己安装。

declare关键字

类型声明文件只包含类型描述,不包含具体实现,所以非常适合使用 declare 语句来描述类型。

类型声明文件里面,变量的类型描述必须使用 declare 命令,否则会报错,因为变量声明语句是值相关代码

declare let foo: string;

interface 类型有没有 declare 都可以,因为 interface 是完全的类型代码。

interface Foo {} // 正确
declare interface Foo {} // 正确

模块发布

当前模块如果包含自己的类型声明文件,可以在 package.json 文件里面添加一个 types 字段或 typings 字段,指明类型声明文件的位置。

{
  "name": "awesome",
  "author": "Vandelay Industries",
  "version": "1.0.0",
  "main": "./lib/main.js",
  "types": "./lib/main.d.ts" // 类型声明文件位置
}

三斜杠命令

如果类型声明文件的内容非常多,可以拆分成多个文件,然后入口文件使用三斜杠命令,加载其他拆分后的文件。

🌰 举例来说,入口文件是 main.d.ts,里面的接口定义在 interfaces.d.ts,函数定义在 functions.d.ts。那么,main.d.ts 里面可以用三斜杠命令,加载后面两个文件。

/// <reference path="./interfaces.d.ts" />
/// <reference path="./functions.d.ts" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八了个戒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值