TS扩展类型

news/2024/5/20 4:20:15 标签: ts, typescript

扩展类型

  • 以扩展interface为例,type同理使用type的规则扩展,如typeA | typeB

  • 方式一:类型声明文件使用declare关键字的,直接在项目类型声明文件进行扩展

ts">// lib.dom.d.ts
declare var Document: {
    prototype: Document;
    new(): Document;
};

// index.d.ts
// 扩展出一个name属性
declare interface Document {
  name: string;
}
// index.ts
let test: Document = document;
console.log(test.name); // 编译通过,运行时必报错

⚠️ 这里是演示,不要瞎扩展

  • 方式二:通过模块导出的扩展类型,通过继承或扩展模块
ts">// 演示axios的CreateAxiosDefaults<any>扩展
// create方法的类型:create(config?: CreateAxiosDefaults): AxiosInstance;
axios.create(config);
config.name; // ❌ 此时绝对报错

// 方式一:通过继承扩展
// type.ts
import type { CreateAxiosDefaults } from "axios";
export interface AxiosConfig<D = any> extends CreateAxiosDefaults<D> {
  name: string;
}
// index.ts
import axios form "axios";
const customConfig: AxiosConfig<any> = {};
customConfig.name // ✅
axios.create(customConfig); // ✅

// 方式二:通过类型声明文件扩展即对模块下的CreateAxiosDefaults方法扩展
// index.d.ts
import "axios"; // 这里需要引入axios是因为,`declare module`会进行覆盖
declare module "axios" {
  name: string;
}
// index.ts
import type { CreateAxiosDefaults } from "axios";
const customConfig: CreateAxiosDefaults<any> = {};
customConfig.name; // ✅
axios.create(customConfig); // ✅

http://www.niftyadmin.cn/n/1754.html

相关文章

STM32F103实现激光测距传感器测距WT-VL53L0 L1

目录 本博客将采用标准库和HAL库实现 所用设备选择 引脚说明 与单片机的接线表 标准库实现 HAL库实现 本博客将采用标准库和HAL库实现 所用设备选择 单片机型号&#xff1a;STM32F103C8T6 激光测距传感器型号&#xff1a;WT-VL53L0 L1 采用串口TTL电平输出&#xff0c;可…

大数据Hadoop之——Apache Hudi 数据湖实战操作(FlinkCDC)

文章目录一、概述二、Hudi 数据管理1&#xff09;.hoodie文件2&#xff09;数据文件三、数据存储四、Hive 与 Hudi 集成使用1&#xff09;安装mysql数据库2&#xff09;安装 Hive1、下载2、配置3、解决Hive与Hadoop之间guava版本的差异4、下载对应版本的mysql驱动包5、初始化元…

硬件工程师成长之路(10.1)——芯片选型

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录前言一、电机驱动类1 、直流电机驱动芯片2、步进电机二、二极管类1、TVS管选型三、稳压芯片1、DCDC芯片2、LDO芯片3、电…

分布式事务-CAPRaft原理

CAP定理 一致性(Consitency)&#xff1a;在分布式系统中的所有数据备份&#xff0c;在同一时刻是否同样的值。 可用性(Availability)&#xff1a;在集群中一部分节点故障后&#xff0c;集群是否还能响应客户的读写请求。 分区容错性(Partition tolerance)&#xff1a;大多数分布…

彻底理解Java并发:volatile关键字

本篇内容包括&#xff1a;volatile 关键字简介、volatile 保证可见性&#xff08;包括&#xff1a;关乎不可见性问题描述、JMM内存模型和不可见性的解决方案&#xff09;以及 volatile 其他特性&#xff08;包括&#xff1a;volatile 不保证原子性、volatile 原子性的保证操作、…

方法与递归(JAVA基础一)

目录一、方法的概念二、方法的定义【重点】2.1 方法的定义2.2 定义的位置三、方法的调用3.1 方法的调用四、方法的参数【重点】4.1 方法的参数4.2 形参与实参4.2.1 单个参数4.2.2 多个参数练习1&#xff1a;调用方法输出字符串练习2&#xff1a;计算两个数的 - * / %练习3&…

Python采集某网站小视频内容, m3u8内容下载

前言 大家早好、午好、晚好吖~ 目录标题前言环境使用:模块使用:模块安装问题:如果安装python第三方模块:安装失败原因:如何配置pycharm里面的python解释器?pycharm如何安装插件?&#x1f447; &#x1f447; &#x1f447; 源码、教程如何实现虫案例: <思路流程 --> 通…

ikun网站成名录: HTML 中的常用标签用法,从0到1创建一个ikun简介

常见标签(以下均省略了< >) 1.标题标签 h1~h6 2.段落&#xff0c;换行标签 由于html的特性&#xff0c;我们在语句中添加换行&#xff0c;多个空格都是没办法对我们的文本分段落的。如图 所以改用这个标签便可分段了&#xff1a; 用于我们文本可能需要手动换行&#x…