成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一起聊聊 TypeScript 中的實用類型(utility type)和轉(zhuǎn)換類型

開發(fā) 前端
Record<K extends keyof any, T> 是 TypeScript 提供的一個實用類型(utility type),用于構(gòu)造一個對象類型,其中鍵 K 的集合可以是任意類型(通常是字符串、數(shù)字或符號),對應(yīng)的值類型為 T。

在學(xué)習(xí) TypeScript 中遇到了Record 這個類型, 一開始不知道其用途, 查找了一下說明才得知:

Record<K extends keyof any, T> 是 TypeScript 提供的一個實用類型(utility type),用于構(gòu)造一個對象類型,其中鍵 K 的集合可以是任意類型(通常是字符串、數(shù)字或符號),對應(yīng)的值類型為 T。

1. 詳細(xì)解釋

1.1 定義

Record<K extends keyof any, T> 的定義如下:

type Record<K extends keyof any, T> = {
    [P in K]: T;
};
  • K extends keyof any:表示 K 可以是任何合法的鍵類型。keyof any 是 TypeScript 中的一個特殊類型,它等價于 string | number | symbol。
  • T:表示屬性的值的類型。
  • { [P in K]: T; }:這是一種映射類型語法,表示生成一個對象類型,這個對象的鍵是 K 中的每一個鍵,其對應(yīng)的值類型都是 T。

1.2 用法示例

  1. 創(chuàng)建一個簡單的對象類型: 假設(shè)我們想要創(chuàng)建一個對象類型,鍵是字符串,值是數(shù)字:
type StringToNumberMap = Record<string, number>;


const example: StringToNumberMap = {
    a: 1,
    b: 2,
    c: 3
};
  1. 限制鍵的集合: 假設(shè)我們有一組特定的鍵,值的類型是布爾型:
type Options = "option1" | "option2" | "option3";
type OptionFlags = Record<Options, boolean>;


const example: OptionFlags = {
    option1: true,
    option2: false,
    option3: true
};
  1. 結(jié)合接口使用: 如果我們有一個接口Person,我們想要創(chuàng)建一個包含多個Person對象的記錄:
interface Person {
    name: string;
    age: number;
}


type PersonDictionary = Record<string, Person>;


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

1.3 詳細(xì)示例

假設(shè)我們需要管理一組用戶,每個用戶都有一個唯一的標(biāo)識符(ID)。我們可以使用 Record 來定義一個用戶字典:

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


type UserDictionary = Record<number, User>;


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

在這個示例中:

  • User 接口定義了用戶對象的結(jié)構(gòu)。
  • UserDictionary 使用 Record<number, User> 創(chuàng)建了一個類型,該類型的鍵是數(shù)字,值是 User 類型。
  • users 變量是一個 UserDictionary 類型的對象,包含多個用戶條目。

2. 類型工具

Record<K extends keyof any, T> 類型在 TypeScript 中非常有用,可以用來定義一個鍵和值類型的映射。它允許我們動態(tài)地創(chuàng)建具有特定鍵集合和值類型的對象類型,廣泛應(yīng)用于需要鍵值對數(shù)據(jù)結(jié)構(gòu)的場景。

在 TypeScript 中還有不少類似的類型工具用于操作和轉(zhuǎn)換類型。以下是它們的具體區(qū)別和用途:

  • Partial

作用:將類型 T 的所有屬性變?yōu)榭蛇x。

用法:

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

作用:將類型 T 的所有屬性變?yōu)楸匦琛?/p>

用法:

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

  • Readonly

作用:將類型 T 的所有屬性變?yōu)橹蛔x。

用法:

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

  • Pick<T, K extends keyof T>

作用:從類型 T 中挑選一組屬性 K 組成新的類型。

用法:

interface Person {
    name: string;
    age: number;
    address: string;
}
type PersonNameAndAge = Pick<Person, 'name' | 'age'>;
// Equivalent to: { name: string; age: number; }

  • Record<K extends keyof any, T>

作用:構(gòu)建一個類型,其鍵為 K 類型,值為 T 類型。

用法:

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

  • Exclude<T, U>

作用:從類型 T 中排除可以賦值給 U 的類型。

用法:

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

  • Extract<T, U>

作用:從類型 T 中提取可以賦值給 U 的類型。

用法:

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

  • Omit<T, K extends keyof any>

作用:構(gòu)建一個類型,其具有類型 T 的屬性,除了那些在 K 中的屬性。

用法:

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

  • NonNullable


作用:從類型 T 中排除 null 和 undefined。

用法:

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

  • Parameters<T extends (...args: any) => any>

作用:獲取函數(shù)類型 T 的參數(shù)類型組成的元組。

用法:

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

這些類型工具在類型操作和變換中非常有用,幫助開發(fā)者更靈活地處理和定義類型。

責(zé)任編輯:武曉燕 來源: DevWiki
相關(guān)推薦

2024-08-09 13:39:27

2024-09-26 07:29:19

2021-03-18 00:04:13

C# 類型數(shù)據(jù)

2024-05-29 12:53:30

2023-04-26 07:42:16

WebGL圖元的類型

2022-12-06 08:12:11

Java關(guān)鍵字

2023-12-28 09:55:08

隊列數(shù)據(jù)結(jié)構(gòu)存儲

2023-10-26 08:38:43

SQL排名平分分區(qū)

2022-04-07 11:43:24

UPnPDLNA協(xié)議

2023-05-31 08:42:02

管理產(chǎn)品技術(shù)項目

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2024-12-03 10:21:56

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發(fā)模式

2023-09-10 21:42:31

2023-09-21 08:16:56

JDK 21向量計算計算

2022-05-24 08:21:16

數(shù)據(jù)安全API

2021-08-27 07:06:10

IOJava抽象
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产九九九 | 青娱乐一区二区 | 欧美日韩亚洲国产 | 久久久91精品国产一区二区三区 | 久久久久久亚洲精品 | 中文字幕 在线观看 | 国产成人a亚洲精品 | 亚洲精品久久久久中文字幕二区 | 日本久久久久久久久 | 亚洲国产精品久久久久婷婷老年 | 亚洲色图婷婷 | 欧美日韩在线成人 | 欧美一级电影免费 | 视频1区 | 欧美一级二级三级 | 亚洲成人精品一区二区 | 一区二区三区欧美在线 | 日本视频一区二区三区 | 成人h动漫亚洲一区二区 | 91精品久久久久久久久中文字幕 | 一区二区视屏 | 国产精品美女一区二区三区 | 黄色一级免费 | 久久久精品网 | 亚洲乱码一区二区三区在线观看 | 国产精品成人国产乱一区 | 日韩综合在线 | 亚洲精品乱码久久久久久蜜桃91 | 精品久久久久久亚洲综合网 | 精品国产乱码久久久久久果冻传媒 | 爱爱小视频 | 九九久久国产 | 日本一区二区不卡 | 美女在线视频一区二区三区 | 精品国产伦一区二区三区观看说明 | 日韩电影免费观看中文字幕 | 国产精品一区二区在线播放 | 国产精品久久久久久久一区二区 | 91精品国产一区 | 精品国产免费一区二区三区五区 | 视频1区2区|