当前位置: 首页 > news >正文

TS扩展类型

扩展类型

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

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

// 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); // 编译通过,运行时必报错

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

  • 方式二:通过模块导出的扩展类型,通过继承或扩展模块
// 演示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); // ✅

相关文章:

  • DASCTF X GFCTF 2022十月挑战赛 Writeup
  • 你真的理解事件委托(事件代理)吗?
  • R语言和医学统计学(8):logistic回归
  • MATLAB | 绘图复刻(三) | 分层聚类分析图:树状图+热图
  • 大学生计算机相关专业有什么血泪建议吗?
  • 不愧是阿里面试官整理的java高级工程师面试 1000 题,面面俱到,太全了
  • 【开卷数据结构 】指针的初步认识
  • Python高级_第3章_HTTP协议与静态Web服务器开发
  • 创造一个表格编辑距离指标
  • 大数据Hadoop之——Apache Hudi 数据湖实战操作(FlinkCDC)
  • ikun网站成名录: HTML 中的常用标签用法,从0到1创建一个ikun简介
  • <Linux系统复习>文件描述符
  • 【C++入门】(纯)虚函数和多态、抽象类、接口
  • 推荐一个C#开发的窗口扩展菜单,支持系统所以窗口
  • 初识深度学习-吴恩达
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • bootstrap创建登录注册页面
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • flutter的key在widget list的作用以及必要性
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • input实现文字超出省略号功能
  • log4j2输出到kafka
  • Lucene解析 - 基本概念
  • MySQL的数据类型
  • node-glob通配符
  • Python打包系统简单入门
  • 产品三维模型在线预览
  • 仿天猫超市收藏抛物线动画工具库
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 理清楚Vue的结构
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 学习Vue.js的五个小例子
  • 移动端解决方案学习记录
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # 数据结构
  • #Java第九次作业--输入输出流和文件操作
  • #pragma预处理命令
  • #图像处理
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1)SpringCloud 整合Python
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (笔试题)合法字符串
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)http协议
  • (转)原始图像数据和PDF中的图像数据
  • .NET Core 项目指定SDK版本
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @hook扩展分析
  • [ C++ ] STL_list 使用及其模拟实现
  • [.NET 即时通信SignalR] 认识SignalR (一)