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

TypeScript 工具类型

这些工具类型是 TypeScript 提供的强大功能,用于操作和转换类型。下面是每个工具类型的简要说明和示例:

1、Record

let value: Record<string, any> = { name: "", age: 0, desc: [] };
let value2: { [key: string]: any } = { name: "", age: 0, desc: [] };

2、Partial<T>: 将类型 T 的所有属性设置为可选。

interface Person {name: string;age: number;}type PartialPerson = Partial<Person>; // { name?: string; age?: number; }let value: PartialPerson = {};let value2: PartialPerson = { name: "" };let value3: PartialPerson = { age: 0 };

3、 Required<T>: 将类型 T 的所有属性设置为必选。


interface PartialPerson {name?: string;age?: number;
}type RequiredPerson = Required<PartialPerson>; // { name: string; age: number; }let value: RequiredPerson = { name: "", age: 0 };

4、 Exclude<T, U>: 从类型 T 中排除 U 的类型。

type T = string | number | boolean;type U = string | number;type Excluded = Exclude<T, U>; // 结果为 booleanlet value: Excluded = false;

5、Omit<T, K>: 从类型 T 中移除属性 K。

interface Person {name: string;age: number;address: string;}type WithoutAddress = Omit<Person, 'address'>; // 结果为 { name: string; age: number; }let value: WithoutAddress = { name: "", age: 0 };

6、Readonly<T>: 将类型 T 的所有属性设置为只读。

interface Person {readonly name: string;readonly age: number;}type ReadonlyPerson = Readonly<Person>;let value: ReadonlyPerson = { name: '', age: 0 };

7、 Pick<T, K>: 从类型 T 中选取指定属性 K 构造新类型。

interface Person {name: string;age: number;address: string;
}type NameAndAge = Pick<Person, 'name' | 'age'>; // { name: string; age: number; }let value: NameAndAge = { name: '', age: 0 };

8、NonNullable<T>: 从类型 T 中排除 null 和 undefined。

type NullableString = string | null | undefined;
type NonNullableString = NonNullable<NullableString>; // 结果为 stringlet value: NonNullableString = '';

9、ReturnType<T>: 获取函数类型 T 的返回值类型。

type Func = () => string;
type Result = ReturnType<Func>; // 结果为 stringlet value: Result = '';

 10、Parameters<T>: 获取函数类型 T 的参数类型组成的元组。

type Func = (x: number, y: string) => boolean;
type Args = Parameters<Func>; // 结果为 [number, string]let value: Args = [0, ''];

 11、Overwrite<T, U>: 使用 U 中的属性覆盖 T 中的对应属性。

type T = { a: number; b: string };
type U = { b: boolean; c: string };
type Overwrite<T, U> = Omit<T, keyof U> & U;
type OverwriteType = Overwrite<T, U>; // 结果为 { a: number; b: boolean; c: string; }let value: OverwriteType = { a: 0, b: true, c: '' };

12、Intersection<T, U>: 返回 T 和 U 的交集类型。

type T = { a: number; b: string };
type U = { b: boolean; c: string };
type Intersection<T, U> = Omit<T, keyof Omit<T, keyof U>>;
type Intersected = Intersection<T, U>; // 结果为 { b: string; }let value: Intersected = { b: '' };

相关文章:

TypeScript 工具类型

这些工具类型是 TypeScript 提供的强大功能&#xff0c;用于操作和转换类型。下面是每个工具类型的简要说明和示例&#xff1a; 1、Record let value: Record<string, any> { name: "", age: 0, desc: [] }; let value2: { [key: string]: any } { name: &…...

[Kotlin]创建一个私有包并使用

1.创建Kotlin测试项目 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置&#xff0c;完成设置。 2.创建Android Library模块 官方文档&#xff1a;创建 Android 库 | Android Studio | Android De…...

鸿蒙应用开发者高级认证指南及参考资料整理(含详细参考答案)

如何报名鸿蒙应用开发者高级认证 报名链接:点击这里进行报名。报名步骤: 点击上述链接进入报名页面。选择“立即报名”。在课程内容中找到“HarmonyOS应用开发者高级认证”,点击进入。点击“参加考试”,随后即可开始考试。考试注意事项 实名认证:考试前,请务必完成实名认…...

数据匿名化技术

不同的数据匿名化技术可用于多种行业&#xff0c;旨在从数据流中获取有用的见解&#xff0c;同时确保满足数据保护标准和法规的合规要求。 数据脱敏&#xff08;Data Masking&#xff09; 数据脱敏&#xff0c;又称数据漂白、数据去隐私化或数据变形&#xff0c;指的是对数据集…...

HTML学习笔记汇总

整理一些常见问题的Links&#xff0c;不定期更新。 Html生成自定义函数的图形&#xff08;2024/5/10&#xff09;-CSDN博客 HTML中插入图片&#xff08;2024/5/10&#xff09;-CSDN博客 Html给网页加icon图标_html icon-CSDN博客...

初始JSVMP

1.初始JSVMP JSVMP是"JavaScript Virtual Machine Protection"的缩写&#xff0c;是一种前端代码虚拟化保护技术。它的核心思想是在JavaScript代码保护过程中引入代码虚拟化&#xff0c;将目标代码转换成自定义的字节码&#xff0c;这些字节码只有特殊的解释器才能识…...

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…...

通过 Java 操作 redis -- zset 有序集合基本命令

目录 使用命令 zadd&#xff0c;zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Jav…...

力扣 516. 最长回文子序列 python AC

动态规划 class Solution:def longestPalindromeSubseq(self, s):size len(s)dp [[0] * size for _ in range(size)]for i in range(size):dp[i][i] 1for i in range(size - 1, -1, -1):for j in range(i 1, size):if s[i] s[j]:dp[i][j] dp[i 1][j - 1] 2else:dp[i][…...

数据库编程

PL/SQL程序 1.PL/SOL程序块 整个PL/SQL块分三部分&#xff1a;声明部分、执行部分、异常处理部分&#xff1b; 示例&#xff1a; declare --变量声明 v_sno varchar2(10) : ‘04001’; v_cno varchar2(10) :‘001’; v_grade number : 90; begin --程序入口 insert…...

(docker)进入容器后如何使用本机gpu

首次创建容器&#xff0c;不能直接使用本机gpu 在系统终端进行如下配置&#xff1a; 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation&#xff0c;安装NVIDIA Container Toolkit …...

java基础知识点总结2024版(8万字超详细整理)

java基础知识点总结2024版&#xff08;超详细整理&#xff09; 这里写目录标题 java基础知识点总结2024版&#xff08;超详细整理&#xff09;java语言的特点1.简单性2.面向对象3.分布式4.健壮性5.安全性6.体系结构中立7.可移植性8.解释性9.多线程10.动态性 初识java中的main方…...

vue中使用element的i18n语言转换(保姆式教程-保证能用)

话不多说&#xff0c;先看效果:预览地址: https://sandm00.github.io/i18n-switch/#/ 1、项目中需要使用的插件&#xff0c;vue2或vue3、element、vue-i18n、js-cookie、vuex我是在vue2中使用 npm i element-ui -S npm i js-cookie -S npm i vue-i18n8.28.2 //因为我项目使用…...

01 设计模式--单例模式

1. 单例模式 单例模式有两种实现方式&#xff1a; 1.1 饿汉模式&#xff08;Eager Initialization&#xff09;&#xff1a;在类加载时就创建单例实例&#xff0c;无论是否需要使用该实例。 饿汉模式在类加载时就创建单例实例&#xff0c;无论是否需要使用该实例。 饿汉模式…...

css backdrop-filter 实现背景滤镜

官方给出的定义是&#xff1a;backdrop-filter属性允许您将图形效果&#xff08;如模糊或颜色偏移&#xff09;应用于元素后面的区域。因为它适用于元素后面的所有内容&#xff0c;所以要查看元素或其背景的效果&#xff0c;需要透明或部分透明。 大致分为以下10种&#xff1a…...

AR人脸道具SDK解决方案,实现道具与人脸的自然融合

AR人脸道具SDK解决方案&#xff0c;实现道具与人脸的自然融合美摄科技以其卓越的技术实力和创新能力&#xff0c;为企业带来了全新的AR人脸道具SDK解决方案。这一解决方案将为企业打开全新的市场机会&#xff0c;为用户带来前所未有的互动体验。 颠覆传统&#xff0c;开启AR人…...

Windows安装RabbitMQ教程(附安装包)

需要两个安装包 Erlang 安装包: https://download.csdn.net/download/Brevity6/89274663 (自己从官网下载也可以) RabbitMQ Windows 安装包&#xff1a; https://download.csdn.net/download/Brevity6/89274667 (自己从官网下载也可以) Erlang安装 Erlang安装傻瓜式下一…...

这个问题无人能解,菜鸟勿进

前言 这是陈旧已久的草稿2021-06-23 23:25:12 现在2024-5-12 21:53:46&#xff0c;发布到[逻辑题]专栏中。 一、问题 1.描述&#xff1a; 在我的世界中建个红石电路 2.需求&#xff1a; 五个灯A、B、C、D、E、F 五个开关a、b、c、d、e、f、总开关 3.要求&#xff1a; 总开关…...

揭秘高效引流获客的艺术:转化技巧大公开

在数字化营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;而流量便是推动船只前行的风帆。如何有效吸引并获取潜在客户&#xff0c;即所谓的“引流获客”&#xff0c;已成为企业市场营销策略中不可或缺的一环。本文将详细探讨几种实用且高效的引流获客技巧…...

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入&#xff0c;允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法&#xff1a; 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…...

深入了解Linux命名空间的cgroups:打开容器技术的黑匣子

cgroups&#xff0c;全称为 Control Groups&#xff0c;是 Linux 内核提供的一种强大的资源管理机制。它的核心作用是将一组进程&#xff08;tasks&#xff09;组织成一个层级化的组&#xff0c;并为这些组分配、限制和监控资源的使用情况。 简单来说&#xff0c;cgroups 允许系…...

STM32F103C8T6 Bootloader分区与跳转详解:手把手配置64KB Flash的16+48分配方案

STM32F103C8T6 Bootloader分区与跳转实战&#xff1a;64KB Flash的1648分配方案深度解析 在嵌入式开发中&#xff0c;Bootloader的设计往往是项目成败的关键一环。对于资源受限的STM32F103C8T6这类仅有64KB Flash的MCU来说&#xff0c;如何在Bootloader和应用程序之间合理分配这…...

中国航空器拥有者及驾驶员协会:我国低空经济重点政策制度汇编(2025)

这份文档是2025 年中国低空经济重点政策制度汇编&#xff0c;由中国航空器拥有者及驾驶员协会编制&#xff0c;全面梳理国家 地方两级低空经济相关法律法规、规章标准与产业政策&#xff0c;核心是构建低空经济 “法律 - 规章 - 标准 - 政策” 四层制度体系&#xff0c;为低空…...

超导量子计算中的三量子比特门技术解析

1. 超导量子计算中的三量子比特门技术概述在量子计算领域&#xff0c;实现高保真度的多量子比特门操作一直是核心挑战。超导量子处理器作为当前最有前景的量子计算平台之一&#xff0c;其性能很大程度上取决于量子门操作的精度和效率。固定频率transmon架构因其出色的相干性和简…...

AI英语智能体的开发

构建一个专门用于英语学习的AI智能体&#xff08;AI Agent&#xff09;&#xff0c;核心在于如何将大语言模型&#xff08;LLM&#xff09;的通用能力&#xff0c;转化为符合二语习得&#xff08;SLA&#xff09;理论的教学逻辑。这类智能体不仅需要“懂英语”&#xff0c;更需…...

别再乱用Pre Launch Init了!Actor Framework嵌套操作者启动的正确姿势(附LabVIEW 2023示例)

Actor Framework嵌套操作者启动陷阱与实战解决方案 在LabVIEW的Actor Framework&#xff08;AF&#xff09;开发中&#xff0c;嵌套操作者的启动顺序是一个看似简单却暗藏玄机的技术细节。许多中级开发者在项目实践中都曾遇到过这样的场景&#xff1a;明明按照常规思路在Pre La…...

puma-dev与Webpack Dev Server集成:解决混合内容错误的终极方案

puma-dev与Webpack Dev Server集成&#xff1a;解决混合内容错误的终极方案 【免费下载链接】puma-dev A tool to manage rack apps in development with puma 项目地址: https://gitcode.com/gh_mirrors/pu/puma-dev 在现代Web开发中&#xff0c;puma-dev作为一款快速、…...

昇腾NPU算子开发进阶:深入理解ops-tensor中的解决方案注册机制 [特殊字符]

昇腾NPU算子开发进阶&#xff1a;深入理解ops-tensor中的解决方案注册机制 &#x1f680; 【免费下载链接】ops-tensor ops-tensor 是 CANN &#xff08;Compute Architecture for Neural Networks&#xff09;算子库中提供张量类计算的基础算子库&#xff0c;采用模块化设计&a…...

5分钟搞定U盘验货!这款绿色工具真香到离谱

兄弟们&#xff0c;你有没有买过那种“1TB只要39块还包邮”的U盘&#xff1f; 醒醒&#xff01;那玩意儿大概率是扩容盘——实际容量可能只有64GB&#xff0c;超出部分写进去的数据全是空气&#xff0c;轻则文件损坏&#xff0c;重则项目代码全丢&#xff0c;救都救不回来&…...

别再傻傻分不清!PECL、CML、LVDS三种高速差分接口,硬件工程师选型避坑指南

高速差分接口选型实战&#xff1a;PECL、CML、LVDS的工程化决策指南 当PCB布线密度突破8层板、信号速率迈入Gbps时代&#xff0c;差分接口的选择直接决定系统稳定性。某通信设备厂商曾因误用LVPECL接口导致整批产品EMC测试失败&#xff0c;损失超百万——这类故事在硬件圈屡见不…...