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

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

在这里插入图片描述


http://www.kler.cn/a/386476.html

相关文章:

  • 微服务(二)
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • HTTP协议基础
  • C#文字识别API场景解析、表格识别提取
  • DNS面临的4大类共计11小类安全风险及防御措施
  • AcWing 302 任务安排 斜率优化的dp
  • Spring Boot技术在导师双选系统中的应用
  • uniapp中使用全局样式文件引入的三种方式
  • 高德地图通过经纬度查找位置和轨迹回放
  • Uboot移植
  • 题解:AtCoder Beginner Contest AT_abc379_d ABC379D Home Garden
  • SpringBoot在线教育系统:数据分析与报告
  • IO同步异步/阻塞非阻塞
  • Flutter中的Extension关键字
  • 桥接 设计模式 软考
  • BIM 地铁站智能可视化应用
  • 简单介绍Nginx服务器的反向代理、负载均衡
  • 小柯剧场“真人秀”:如何玩转情感与竞技的双重游戏?
  • 学习记录:js算法(八十九):电话号码的字母组合
  • # 设置ubuntu为中文后,如何保留用户家目录等文件夹名为英文
  • 基于FE1.1(非FE1.1S)的HUB拓展板子 2024/11/9
  • 【力扣热题100】[Java版] 刷题笔记-160. 相交链表
  • Linux:调试器 gdb/cgdb 的使用
  • Spark的容错机制
  • 数据编排与ETL有什么关系?
  • Springboot中的单元测试该如何进行?