文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一起聊聊 TypeScript 中的实用类型(utility type)和转换类型

2024-11-29 19:40

关注

Record 是 TypeScript 提供的一个实用类型(utility type),用于构造一个对象类型,其中键 K 的集合可以是任意类型(通常是字符串、数字或符号),对应的值类型为 T。

1. 详细解释

1.1 定义

Record 的定义如下:

type Record = {
    [P in K]: T;
};

1.2 用法示例

  1. 创建一个简单的对象类型: 假设我们想要创建一个对象类型,键是字符串,值是数字:
type StringToNumberMap = Record;


const example: StringToNumberMap = {
    a: 1,
    b: 2,
    c: 3
};
  1. 限制键的集合: 假设我们有一组特定的键,值的类型是布尔型:
type Options = "option1" | "option2" | "option3";
type OptionFlags = Record;


const example: OptionFlags = {
    option1: true,
    option2: false,
    option3: true
};
  1. 结合接口使用: 如果我们有一个接口Person,我们想要创建一个包含多个Person对象的记录:
interface Person {
    name: string;
    age: number;
}


type PersonDictionary = Record;


const persons: PersonDictionary = {
    john: { name: "John Doe", age: 25 },
    jane: { name: "Jane Smith", age: 30 }
};

1.3 详细示例

假设我们需要管理一组用户,每个用户都有一个唯一的标识符(ID)。我们可以使用 Record 来定义一个用户字典:

interface User {
    id: number;
    name: string;
    email: string;
}


type UserDictionary = Record;


const users: UserDictionary = {
    1: { id: 1, name: "John Doe", email: "john.doe@example.com" },
    2: { id: 2, name: "Jane Smith", email: "jane.smith@example.com" },
    3: { id: 3, name: "Emily Johnson", email: "emily.johnson@example.com" }
};


// 访问用户信息
console.log(users[1].name);  // 输出: John Doe

在这个示例中:

2. 类型工具

Record 类型在 TypeScript 中非常有用,可以用来定义一个键和值类型的映射。它允许我们动态地创建具有特定键集合和值类型的对象类型,广泛应用于需要键值对数据结构的场景。

在 TypeScript 中还有不少类似的类型工具用于操作和转换类型。以下是它们的具体区别和用途:

作用:将类型 T 的所有属性变为可选。

用法:

interface Person {
    name: string;
    age: number;
}
type PartialPerson = Partial;
// Equivalent to: { name?: string; age?: number; }

作用:将类型 T 的所有属性变为必需。

用法:

interface Person {
    name?: string;
    age?: number;
}
type RequiredPerson = Required;
// Equivalent to: { name: string; age: number; }

作用:将类型 T 的所有属性变为只读。

用法:

interface Person {
    name: string;
    age: number;
}
type ReadonlyPerson = Readonly;
// Equivalent to: { readonly name: string; readonly age: number; }

作用:从类型 T 中挑选一组属性 K 组成新的类型。

用法:

interface Person {
    name: string;
    age: number;
    address: string;
}
type PersonNameAndAge = Pick;
// Equivalent to: { name: string; age: number; }

作用:构建一个类型,其键为 K 类型,值为 T 类型。

用法:

type PersonRecord = Record;
// Equivalent to: { [key: string]: number; }

作用:从类型 T 中排除可以赋值给 U 的类型。

用法:

type T = string | number | boolean;
type Excluded = Exclude;
// Equivalent to: string | number

作用:从类型 T 中提取可以赋值给 U 的类型。

用法:

type T = string | number | boolean;
type Extracted = Extract;
// Equivalent to: boolean

作用:构建一个类型,其具有类型 T 的属性,除了那些在 K 中的属性。

用法:

interface Person {
    name: string;
    age: number;
    address: string;
}
type PersonWithoutAddress = Omit;
// Equivalent to: { name: string; age: number; }

作用:从类型 T 中排除 null 和 undefined。

用法:

type T = string | number | null | undefined;
type NonNullableT = NonNullable;
// Equivalent to: string | number

作用:获取函数类型 T 的参数类型组成的元组。

用法:

type Func = (a: string, b: number) => void;
type Params = Parameters;
// Equivalent to: [string, number]

这些类型工具在类型操作和变换中非常有用,帮助开发者更灵活地处理和定义类型。

来源:DevWiki内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯