【TypeScript系列】TypeScript 声明文件

举例

这篇指南的目的是教你如何书写高质量的 TypeScript 声明文件。
我们在这里会展示一些 API 的文档,以及它们的使用示例,
并且阐述了如何为它们书写声明文件。

这些例子是按复杂度递增的顺序组织的。

  • 带属性的对象
  • 函数重载
  • 可重用类型(接口)
  • 可重用类型(类型别名)
  • 组织类型
  • 全局变量
  • 全局函数

带属性的对象

文档

全局变量myLib包含一个用于创建祝福的makeGreeting函数,
以及表示祝福数量的numberOfGreetings属性。

代码

let result = myLib.makeGreeting('hello, world');
console.log('The computed greeting is:' + result);let count = myLib.numberOfGreetings;

声明

使用declare namespace来描述用点表示法访问的类型或值。

declare namespace myLib {function makeGreeting(s: string): string;let numberOfGreetings: number;
}

函数重载

文档

getWidget函数接收一个数字参数并返回一个组件;或者接收一个字符串参数并返回一个组件数组。

代码

let x: Widget = getWidget(43);let arr: Widget[] = getWidget('all of them');

声明

declare function getWidget(n: number): Widget;
declare function getWidget(s: string): Widget[];

可重用类型(接口)

文档

当指定一个祝福词时,你必须传入一个GreetingSettings对象。
这个对象具有以下几个属性:

1- greeting:必需的字符串

2- duration: 可选的持续时间(以毫秒表示)

3- color: 可选的字符串,比如’#ff00ff’

代码

greet({greeting: 'hello world',duration: 4000,
});

声明

使用interface定义一个带有属性的类型。

interface GreetingSettings {greeting: string;duration?: number;color?: string;
}declare function greet(setting: GreetingSettings): void;

可重用类型(类型别名)

文档

在任何需要祝福词的地方,你可以提供一个string,一个返回string的函数或一个Greeter实例。

代码

function getGreeting() {return 'howdy';
}
class MyGreeter extends Greeter {}greet('hello');
greet(getGreeting);
greet(new MyGreeter());

声明

你可以使用类型别名来定义类型的短名:

type GreetingLike = string | (() => string) | MyGreeter;declare function greet(g: GreetingLike): void;

组织类型

文档

greeter对象能够记录到文件或显示一个警告。
你可以为.log(...)提供 log 选项以及为.alert(...)提供 alert 选项。

代码

const g = new Greeter('Hello');
g.log({ verbose: true });
g.alert({ modal: false, title: 'Current Greeting' });

声明

使用命名空间组织类型。

declare namespace GreetingLib {interface LogOptions {verbose?: boolean;}interface AlertOptions {modal: boolean;title?: string;color?: string;}
}

你也可以在一个声明中创建嵌套的命名空间:

declare namespace GreetingLib.Options {// Refer to via GreetingLib.Options.Loginterface Log {verbose?: boolean;}interface Alert {modal: boolean;title?: string;color?: string;}
}

文档

你可以通过实例化Greeter对象来创建祝福语,或者继承Greeter对象来自定义祝福语。

代码

const myGreeter = new Greeter('hello, world');
myGreeter.greeting = 'howdy';
myGreeter.showGreeting();class SpecialGreeter extends Greeter {constructor() {super('Very special greetings');}
}

声明

使用declare class来描述一个类或像类一样的对象。
类可以有属性和方法,就和构造函数一样。

declare class Greeter {constructor(greeting: string);greeting: string;showGreeting(): void;
}

全局变量

文档

全局变量foo包含了存在的组件总数。

代码

console.log('Half the number of widgets is ' + foo / 2);

声明

使用declare var声明变量。
如果变量是只读的,那么可以使用declare const
你还可以使用declare let,如果变量拥有块级作用域。

/** The number of widgets present */
declare var foo: number;

全局函数

文档

你可以使用一个字符串参数来调用greet函数,并向用户显示一条祝福语。

代码

greet('hello, world');

声明

使用declare function来声明函数。

declare function greet(greeting: string): void;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯---数论相关问题

目录 一、最大公约数和最小公倍数 二、素数判断 三、同余 四、唯一分解定理 五、约数个数定理 六、约数和定理 五、快速幂 六、费马小定理 七、逆元 一、最大公约数和最小公倍数 文章链接:最大公约数和最小公倍数 二、素数判断 文章链接:在J…

飞书机器人的开发

飞书机器人是飞书提供的一种自动化工具,可以帮助用户在飞书平台上实现自动化任务、消息推送等功能。飞书机器人基于Webhook技术,通过HTTP请求实现与外部系统的通信。下面我将介绍如何在飞书上开发一个简单的机器人,并提供一些示例代码和操作步…

【名词概念】Headless BI

https://mp.weixin.qq.com/s/i4rTR7PdBrjvh1HNmID0sg 在理解Headless BI之前,我们需要先理解一下什么叫做Headless? Headless的概念最初的来源与内容管理平台有关,一般是指内容管理平台中的一些应用不提供可视化界面,只是通过API方式把内容…

碧桂园服务:以长期主义走出稳健增长曲线

3月27日,碧桂园服务发布了2023全年业绩,总收入约426.1亿元,同比增长3.0%,保持稳健增长的势头。在会上,碧桂园服务执行董事、总裁徐彬淮发布公司未来战略,提出“稳中求进,以进促稳”的发展主旋律…

QT 创建线程的几种方法

//qt创建线程的几种方法 //在Qt中,创建线程的主要方法有以下几种: //1.继承QThread类重写run方法 class MyThread : public QThread { Q_OBJECT public: void run() override { // 在这里执行你的代码 } }; // 使用 MyThread *myThread n…

C语言——#define的使用

#define定义常量 基本语法 #define name stuff //(#define)(变量名)(定义的数值) 这里记得,是不加分号的 定义常量(这里 就要涉及我们经常说的宏定义) 定义常量的使…

蚓链使用数字化能力做到让企业增值

蚓链使用数字化能力做到让企业增值 蚓链致力于推动企业从消费互联网向产业互联网的转型。通过提供数据价值与新兴技术相结合的工具,蚓链帮助企业重塑业务流程、优化企业结构,进而重构整个产业生态。这种转型不仅有助于企业提升运营效率,还能…

sklearn库都有哪些数据集

Scikit-learn(通常简称为sklearn)是Python的一个开源机器学习库,它包含了许多用于机器学习和数据挖掘的工具。其中,它提供了一些内置的数据集,用于测试算法和训练模型。以下是截至我的知识截止日期为止,skl…

Python爬虫-爬取药膳食谱数据

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…

C++ 【填充书架】

填充书架 dp[ i ] 放下第i 本书的最小高度 递推公式&#xff1a;要放第 i 本书的时候 假定前面有 j 本书在书架上&#xff0c;j<i &#xff0c;【 j - i 】之间的书作为最上层的&#xff0c;算出最上层书的最小层数 本题的目的是划分成多个子数组&#xff0c;这类问题&a…

前端学习之DOM编程案例:抽奖案例

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>抽奖案例</title><style>*{margin: 0;padding: 0;}</style> </head> <body><div id"container"&g…

搜索(DFS BFS)

DFS 常规DFS: 二叉树前序,中序&#xff0c;后序遍历-CSDN博客 void postorderTraversal(root)初始化一个空列表 arrfind访问总树(root,arr)return arrvoid find(temp, arr)if temp 为空return // 调用顺序由前中后序决定find递归访问左子树find递归访问右子树arr加入当前节点…

深入了解Flutter中的Sealed Class及其使用

Flutter Sealed Class 简介 Sealed Class 是 Dart 3 中引入的一个新特性&#xff0c;它允许您创建一组有限且封闭的类层次结构。这意味着&#xff1a; Sealed 类只能在其定义所在的同一文件中扩展。所有可能的子类在编译时都必须已知。 Sealed Class 的主要优点是&#xff1…

浅谈Redis和一些指令

浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端&#xff08;桌面程序&#xff0c;web程序&#xff09; 像这样的图形…

阿里云服务器可以干嘛?能干啥你还不知道么!

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…

速盾:cdn防止dns劫持原理

CDN&#xff08;内容分发网络&#xff09;在防止DNS劫持方面的原理主要有以下几个方面&#xff1a; 域名解析多级验证&#xff1a;CDN会在DNS服务器上设置多级域名解析验证。当用户请求访问一个网站时&#xff0c;CDN会首先从DNS服务器获取到域名的IP地址&#xff0c;并验证该I…

Flutter学习12 - SharedPreferences

1、shared_preferences 插件 类似于 Android 中的 SharedPreferences&#xff0c;键值对的形式进行本地存储 1.1、引入插件 在 pubspec.yaml 中引入 dependencies:shared_preferences: ^2.1.0在需要用到的文件中引入 import package:shared_preferences/shared_preference…

二维相位解包理论算法和软件【全文翻译- 掩码(3.4)】

本节我们将研究从质量图中提取掩码的问题。掩码是一个质量图,其像素只有两个值:0 或 1。零值像素标志着质量最低的相位值,这些相位值将被屏蔽、零权重或忽略。第 5 章中的某些 L/ 正则算法需要使用掩码来定义零权重。掩码还可用于某些路径跟踪算法,如第 4.5 节中将要介绍的…

人工智能时代呼唤科技与创新成为新榜样

人工智能时代呼唤科技与创新成为新榜样 雷军&#xff0c;好久不见&#xff01;这两天&#xff0c;你的出现仿佛为商业界注入了一股清流&#xff0c;让我深感欣慰。尽管你的目的或许只是为了推广产品&#xff0c;但你确实在这个充斥着各种卖货、卖情怀和卖道德的商业大潮中&…

基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的美发管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…