typescript 补充

文章目录

    • Pick<T, K> 从 T 中挑选部分属性构成新类型
    • Partial<T>:将类型的所有属性变为可选
    • Required<T>:将类型的属性变为必选。
    • Omit<T, K>:从 T 中移除部分属性构成新类型。
    • Readonly<T>:将类型的属性设为只读。
    • Record<string | number | symbol,any>
    • 类型推断
    • 数组的不可变性 (ReadonlyArray)
    • 深度不可变 DeepReadonly

在这里插入图片描述

Pick<T, K> 从 T 中挑选部分属性构成新类型

interface Person {
  name: string;
  age: number;
  email?: string;
}

type PickedPerson = Pick<Person, "name" | "age">; // { name: string; age: number }

const person: PickedPerson = {
  age: 20,
  name: "Tom",
};

Partial:将类型的所有属性变为可选

interface IProps {
  name: string;
  age: number;
  sex: "男" | "女";
  job?: string;
}

type Person2 = Partial<IProps>; // { name?: string; age?: number; sex?: "男" | "女"; job?: string }

const person2: Person2 = {
  name: "Tom",
  sex: "男",
};

Required:将类型的属性变为必选。

interface IProps {
  name: string;
  age: number;
  sex: "男" | "女";
  job?: string;
}

type Person3 = Required<IProps>; // { name: string; age: number; sex: "男" | "女"; job: string }

const person3: Person3 = {
  name: "Tom",
  age: 20,
  sex: "男",
  job: "程序员",
};

Omit<T, K>:从 T 中移除部分属性构成新类型。

interface IProps {
  name: string;
  age: number;
  sex: "男" | "女";
  job?: string;
}

type Person6 = Omit<IProps, "sex" | "name">; // { age: number; job?: string }

const person6 : Person6 = {
    age: 20,
    job: "程序员",
}

Readonly:将类型的属性设为只读。

interface IProps {
  name: string;
  age: number;
  sex: "男" | "女";
  job?: string;
}

type Person4 = Readonly<IProps>;

const person4: Person4 = {
    name: "Tom",
    age: 20,
    sex: '男',
}

// person4.name = "Jerry"; // 会报错,因为name是只读的

Record<string | number | symbol,any>

Record<string | number | symbol,any> 是一个类型工具,用于创建一个对象类型,其中键的类型可以选三种 ,值的类型可以任意规定

interface IProps {
  name: string;
  age: number;
  sex: "男" | "女";
  job?: string;
}

type Person = Pick<IProps, "name" | "age">;

const person5: Record<string, Person> = {
    Tom: {
        name: "Tom",
        age: 20,
    },
    Jerry: {
        name: "Jerry",
        age: 22,
    },
}

类型推断

ReturnType 是返回函数的返回值的类型
Parameters 是返回参数的类型

type Func = (x: number, y: string) => boolean;
type ReturnTypeOfFunc = ReturnType<Func>; // boolean
type ParametersOfFunc = Parameters<Func>; // [number, string]

数组的不可变性 (ReadonlyArray)

ReadonlyArray 是 readonly 在数组中的一种特例。与普通数组不同,ReadonlyArray 禁止使用会修改数组的方法(例如 push、pop 等),从而确保数组内容不会被改变。

const numbers: ReadonlyArray<number> = [1, 2, 3];

// numbers.push(4); // 错误:ReadonlyArray 不允许修改数组内容

深度不可变 DeepReadonly

仅将嵌套对象设为不可变,而让顶层的普通属性保持可变状态

type DeepReadonly<T> = {
    [K in keyof T]: T[K] extends object ? Readonly<T[K]> : T[K];
  };

interface PersonA {
    name: string;
    address: { city: string; zip: string };
  }
  
  const person7: DeepReadonly<PersonA> = {
    name: "Alice",
    address: { city: "New York", zip: "10001" },
  };
  
  person7.name = "Bob"; 
  // person7.address.city = "Boston" // Error

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git介绍以及SSH配置

目录 1. Git介绍 1.1 Git的基本原理 1.2 Git的主要功能 1.3 Git的优点 1.4 Git的缺点 2. Git安装 3. SSH配置 1. Git介绍 Git是一款功能强大的分布式版本控制系统&#xff0c;最初由Linux操作系统的开发者Linus Torvalds在2005年开发&#xff0c;用于管理Linux内核的源代…

java多线程sleep() 和 wait() 有什么区别?

大家好&#xff0c;我是锋哥。今天分享关于【java多线程sleep() 和 wait() 有什么区别?】面试题。希望对大家有帮助&#xff1b; java多线程sleep() 和 wait() 有什么区别? 在Java中&#xff0c;sleep() 和 wait() 都是多线程编程中常用的控制线程执行的方法。它们看似有相似…

从无音响Windows 端到 有音响macOS 端实时音频传输播放

以下是从 Windows 端到 macOS 端传输音频的优化方案&#xff0c;基于上述链接中的思路进行调整&#xff1a; Windows 端操作 安装必要软件 安装 Python&#xff08;确保版本兼容且已正确配置环境变量&#xff09;。安装 PyAudio 库&#xff0c;可通过 pip install pyaudio 命令…

测度论原创(三)

Morden Prob 文章目录 Morden ProbWeek3多维扩展和随机向量定理3.1推论&#xff1a;random variable的变换定理3.2 连续函数的可测性定理3.3 可测函数的线性组合关于拓展实数集的延伸定理3.4 可测函数的极限依旧为可测性随机变量的概率律&#xff08;Law of X X X&#xff09;…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性&#xff1a;C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

uniapp实现H5和微信小程序获取当前位置(腾讯地图)

之前的一个老项目&#xff0c;使用 uniapp 的 uni.getLocation 发现H5端定位不准确&#xff0c;比如余杭区会定位到临平区&#xff0c;根据官方文档初步判断是项目的uniapp的版本太低。 我选择的方式不是区更新uniapp的版本&#xff0c;是直接使用高德地图的api获取定位。 1.首…

Pycharm,2024最新版Pycharm下载安装配置教程!

目录 1、Pycharm 简介2、Pycharm下载3、环境变量的配置4、Pycharm的使用 1、Pycharm 简介 Pycharm资料领取不收米 PyCharm是一种Python IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Py…

(十三)JavaWeb后端开发——MySQL2

目录 1.DQL数据查询语言 1.1基本查询 1.2条件查询 where关键字 1.3分组查询 1.4排序查询 1.5分页查询 2.多表设计 3.多表查询——联查 4.多表查询——子查询​ 5.MySQL 事务 6.事务管理&#xff08;事务进阶&#xff09; 7.MySQL 索引 1.DQL数据查询语言 分为五大…

C++虚继承演示

在继承中如果出现&#xff1a; 这种情况&#xff0c;B和C都继承了A&#xff0c;D继承了B、C 在D中访问A的成员会出现&#xff1a; 这样的警告 是因为在继承时A出现两条分支&#xff1a;ABD、ACD 编译器不知道访问的A中的元素是经过B继承还是C继承 所以B、C在继承A时要用到…

【论文速看】DL最新进展20241109-图像超分、物理信息神经网络、扩散模型

目录 【图像超分】【物理信息神经网络】【扩散模型】 【图像超分】 [2024 红外图像超分] Infrared Image Super-Resolution via Lightweight Information Split Network 论文链接&#xff1a;https://arxiv.org/pdf/2405.10561v2 代码链接&#xff1a;无 单图像超分辨率&…

革命性AI搜索引擎!ChatGPT最新功能发布,无广告更智能!

文章目录 零、前言一、ChatGPT最新AI搜索引擎功能操作指导实战1:搜索新闻实战2:搜索天气实战3:搜索体育消息 二、感受 零、前言 大人&#xff0c;时代变了。 最强 AI 助力下的无广告搜索引擎终于问世。我们期待已久的这一刻终于到来了&#xff0c;从今天起&#xff0c;ChatGPT…

qt QLocale详解

1、概述 QLocale是Qt框架中的一个类&#xff0c;用于处理与本地化相关的操作。它能够方便地实现日期、时间、数字和货币的格式化和解析&#xff0c;支持不同的语言、区域设置和字符集。QLocale提供了一种跨平台的方式来获取当前系统的语言设置&#xff0c;并返回该语言的本地化…

Linux基础4-进程4(环境变量,命令行参数详解)

上篇文章:Linux基础4-进程3(进程优先级&#xff0c;竞争&#xff0c;独立&#xff0c;并行&#xff0c;并发&#xff0c;进程切换)-CSDN博客 本章重点: Linux中环境变量的理解和使用 目录 一. 环境变量概念和查看环境变量 1.1 环境变量概念 1.2 查看环境变量 二. 获取环境变…

Java学习路线:Maven(一)认识Maven

目录 认识Maven 新建Maven文件 导入依赖 认识Maven Maven是一个Java的项目管理工具&#xff0c;通过Maven&#xff0c;我们可以实现&#xff1a; 项目自动构建&#xff0c;包括代码的编译、测试、打包、安装等依赖管理&#xff0c;快速完成依赖的导入 在学习Maven之前&…

Node.js——fs模块-文件删除

1、在Node.js中&#xff0c;我们可以使用unlink或unlinkSync来删除文件。 2、语法&#xff1a; fs.unlink(path,callback) fs.unlinkSync(path) 参数说明&#xff1a; path 文件路径 callback 操作后的回调函数 本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学…

PG逻辑复制的REPLICA IDENTITY几种设置

前两天同事问了一个PG的错误&#xff0c;创建一张普通表&#xff0c;insert插入正常&#xff0c;但是执行update和delete时&#xff0c;提示这个错误&#xff0c; 代码语言&#xff1a;javascript 复制 SQL 错误 [55000]: ERROR: cannot delete from table "temp_tb&qu…

【人工智能】利用大语言模型(LLM)实现机器学习模型选择与实验的自动化

文章目录 引言环境准备数据集说明 项目结构主要文件说明 导入必要的软件包软件包功能简述 辅助函数定义加载配置文件加载数据集预处理数据集函数功能详解 集成LLM进行模型选择调用LLM的函数定义函数功能详解 清理和验证LLM的输出清理超参数建议提取模型名称验证超参数修正超参数…

机器学习在时间序列预测中的应用与实现——以电力负荷预测为例(附代码)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着数据采集技术的发展&#xff0c;时间序列数据在各个领域中的应用越来越广泛。时间序列预测旨在基于过去的时间数据来…

Python学习------第四天

Python的判断语句 一、布尔类型和比较运算符 二、 if语句的基本格式 if语句注意空格缩进&#xff01;&#xff01;&#xff01; if else python判断语句的嵌套用法&#xff1a;

Vue3版本的uniapp项目运行至鸿蒙系统

新建Vue3版本的uniapp项目 注意&#xff0c;先将HbuilderX升级至最新版本&#xff0c;这样才支持鸿蒙系统的调试与运行&#xff1b; 按照如下图片点击&#xff0c;快速升级皆可。 通过HbuilderX创建 官方文档指导链接 点击HbuilderX中左上角文件->新建->项目 创建vue3…