<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TS中"Pick"和"Extract"的區(qū)別

          共 2636字,需瀏覽 6分鐘

           ·

          2023-08-22 11:46


          "Extract"是一個(gè)常見的操作,用于從數(shù)據(jù)結(jié)構(gòu)中獲取子集。在TypeScript中,"Extract"是一個(gè)工具類型,用于從聯(lián)合類型中提取特定的類型。以下是其基本用法:

          type T = 'a' | 'b' | 'c';
          type R = Extract<T, 'a' | 'b'>; // 'a' | 'b'

          在這個(gè)例子中,T是一個(gè)聯(lián)合類型,包含'a', 'b', 'c'三種類型。Extract<T, 'a' | 'b'>將從T中提取出'a'和'b',所以R的類型是'a' | 'b'。


          在TypeScript中,"Exclude"也是一個(gè)工具類型,用于從一個(gè)類型中排除出另一個(gè)類型。以下是其基本用法:

          type T = 'a' | 'b' | 'c';
          type R = Exclude<T, 'a' | 'b'>; // 'c'

          在這個(gè)例子中,T是一個(gè)聯(lián)合類型,包含'a', 'b', 'c'三種類型。Exclude<T, 'a' | 'b'>將從T中排除出'a'和'b',所以R的類型是'c'。


          看到這里可能覺得沒什么難的,我們?cè)倏聪聝烧叩脑创a。

          type Exclude<T, U> = T extends U ? never : T;
          type Extract<T, U> = T extends U ? T : never;


          在TypeScript中,如果你想要?jiǎng)?chuàng)建一個(gè)泛型,該泛型應(yīng)該被約束為非字符串類型,你可以使用"Exclude"工具類型來排除字符串。以下是一個(gè)例子:

          type NonString<T> = Exclude<T, string>;
          let num: NonString<number | string>; // num can only be number nownum = 123; // OKnum = "123"; // Error: Type 'string' is not assignable to type 'number'.

          在這個(gè)例子中,NonString 是一個(gè)新的泛型類型,它從T中排除了字符串類型。因此,當(dāng)你嘗試將一個(gè)字符串賦值給num時(shí),TypeScript會(huì)拋出一個(gè)錯(cuò)誤,因?yàn)樽址皇荖onString<number | string>的一個(gè)有效類型。


          "Pick"和"Omit"也是工具類型,它們用于從對(duì)象類型中選擇或排除某些屬性。以下是它們的基本用法:


          "Pick"用法:

          type Todo = {  title: string;  description: string;  completed: boolean;};
          type TodoPreview = Pick<Todo, 'title' | 'completed'>;
          let todo: TodoPreview = { title: 'Clean room', completed: false,};

          在這個(gè)例子中,Todo是一個(gè)對(duì)象類型,包含'title', 'description', 'completed'三個(gè)屬性。Pick<Todo, 'title' | 'completed'>將從Todo中選擇'title'和'completed',所以TodoPreview的類型是 { title: string; completed: boolean; }。


          "Omit"用法:

          type Todo = {  title: string;  description: string;  completed: boolean;};
          type TodoPreview = Omit<Todo, 'description'>;
          let todo: TodoPreview = { title: 'Clean room', completed: false,};

          在這個(gè)例子中,Todo是一個(gè)對(duì)象類型,包含'title', 'description', 'completed'三個(gè)屬性。Omit<Todo, 'description'>將從Todo中排除'description',所以TodoPreview的類型是 { title: string; completed: boolean; }。


          我們?cè)倏聪聝烧叩脑创a。

          type Pick<Type, K extends keyof Type> = { [P in K]: Type[P]; }
          type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;


          "Pick"和"Extract"都是工具類型,但它們的用途和工作方式有所不同??偟膩碚f,"Pick"和"Extract"都是用于創(chuàng)建新的類型,但"Pick"是從一個(gè)對(duì)象類型中選擇屬性,而"Extract"是從一個(gè)聯(lián)合類型中提取類型。

          瀏覽 169
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜久久电影 | 91热视频 | 国产成人精品二三区麻豆 | 中文字幕成人在线视频 | 人人干国产 |