<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>

          13 個Typescript 實(shí)用類型:開發(fā)人員的備忘單

          共 5874字,需瀏覽 12分鐘

           ·

          2022-05-28 17:47

          作者:前端小智

          簡介:思否百萬閱讀,勵志退休后,回家擺地?cái)偟娜恕?/span>

          來源:SegmentFault  思否社區(qū) 


          在類型檢查方面,Typescript非常強(qiáng)大,但有時(shí)當(dāng)一些類型是其他類型的子集,而你需要為它們定義類型檢查時(shí),它就變得很乏味。


          舉個例子,你有2個響應(yīng)類型。


          interface UserProfileResponse {
            id: number;
            name: string;
            email: string;
            phone: string;
            avatar: string;
          }

          interface LoginResponse {
            id: number;
            name: string;
          }


          我們可以為 UserProfileResponse 定義類型,并為 LoginResponse 挑選一些屬性,而不是定義相同上下文的 LoginResponse 和 UserProfileResponse 的類型。


          type LoginResponse = Pick<UserProfileResponse, "id" | "name">;


          讓我們來了解一些可以幫助你寫出更好的代碼的實(shí)用函數(shù)。


          Uppercase



          構(gòu)建一個類型的所有屬性都設(shè)置為大寫的類型。


          type Role = "admin" | "user" | "guest";

          // Bad practice ??
          type UppercaseRole = "ADMIN" | "USER" | "GUEST";

          // Good practice ?
          type UppercaseRole = Uppercase<Role>; // "ADMIN" | "USER" | "GUEST"


          Lowercase



          構(gòu)建一個類型的所有屬性都設(shè)置為小寫的類型。與 Uppercase 相反。


          type Role = "ADMIN" | "USER" | "GUEST";

          // Bad practice ??
          type LowercaseRole = "admin" | "user" | "guest";

          // Good practice ?
          type LowercaseRole = Lowercase<Role>; // "admin" | "user" | "guest"


          Capitalize



          構(gòu)建一個類型的所有屬性都設(shè)置為大寫開頭的類型。


          type Role = "admin" | "user" | "guest";

          // Bad practice ??
          type CapitalizeRole = "Admin" | "User" | "Guest";

          // Good practice ?
          type CapitalizeRole = Capitalize<Role>; // "Admin" | "User" | "Guest"


          Uncapitalize



          構(gòu)建一個類型的所有屬性都設(shè)置為非大寫的類型。與Capitalize相反。


          type Role = "Admin" | "User" | "Guest";

          // Bad practice ??
          type UncapitalizeRole = "admin" | "user" | "guest";

          // Good practice ?
          type UncapitalizeRole = Uncapitalize<Role>; // "admin" | "user" | "guest"


          Partial



          構(gòu)建一個類型的所有屬性都設(shè)置為可選的類型。


          interface User {
            name: string;
            age: number;
            password: string;
          }

          // Bad practice ??
          interface PartialUser {
            name?: string;
            age?: number;
            password?: string;
          }

          // Good practice ?
          type PartialUser = Partial<User>;


          Required



          構(gòu)建一個由Type的所有屬性組成的類型,設(shè)置為必填。與Partial相反。


          interface User {
            name?: string;
            age?: number;
            password?: string;
          }

          // Bad practice ??
          interface RequiredUser {
            name: string;
            age: number;
            password: string;
          }

          // Good practice ?
          type RequiredUser = Required<User>;


          Readonly



          構(gòu)建一個由Type的所有屬性組成的類型,設(shè)置為只讀。


          Record是一個很好用的工具類型。他會將一個類型的所有屬性值都映射到另一個類型上并創(chuàng)造一個新的類型


          interface User {
            role: string;
          }

          // Bad practice ??
          const user: User = { role: "ADMIN" };
          user.role = "USER";

          // Good practice ?
          type ReadonlyUser = Readonly<User>;
          const user: ReadonlyUser = { role: "ADMIN" };
          user.role = "USER"; // Error: Cannot assign to 'role' because it is a read-only property.


          Record



          Record是一個很好用的工具類型。他會將一個類型的所有屬性值都映射到另一個類型上并創(chuàng)造一個新的類型。


          interface Address {
            street: string;
            pin: number;
          }

          interface Addresses {
            home: Address;
            office: Address;
          }

          // 或者
          type AddressesRecord = Record<"home" | "office", Address>;


          Pick



          從一個復(fù)合類型中,取出幾個想要的類型的組合


          interface User {
            name: string;
            age: number;
            password: string;
          }

          // Bad practice ??
          interface UserPartial {
            name: string;
            age: number;
          }

          // Good practice ?
          type UserPartial = Pick<User, "name" | "age">;


          Omit



          以一個類型為基礎(chǔ)支持剔除某些屬性,然后返回一個新類型。


          interface User {
            name: string;
            age: number;
            password: string;
          }

          // Bad practice ??
          interface UserPartial {
            name: string;
            age: number;
          }

          // Good practice ?
          type UserPartial = Omit<User, "password">;


          Exclude



          Exclude<T, U>,該工具類型能夠從類型T中剔除所有可以賦值給類型U的類型。


          type Role = "ADMIN" | "USER" | "GUEST";

          // Bad practice ??
          type NonAdminRole = "USER" | "GUEST";

          // Good practice ?
          type NonAdmin = Exclude<Role, "ADMIN">; // "USER" | "GUEST"

          Extract



          Extract 的功能,與 Exclude 相反,它是 提取 T 中可以賦值給 U 的類型。


          type Role = "ADMIN" | "USER" | "GUEST";

          // Bad practice ??
          type AdminRole = "ADMIN";

          // Good practice ?
          type Admin = Extract<Role, "ADMIN">; // "ADMIN"



          NonNullable



          構(gòu)建一個類型的所有屬性都設(shè)置為非空的類型。


          type Role = "ADMIN" | "USER" | null;

          // Bad practice ??
          type NonNullableRole = "ADMIN" | "USER";

          // Good practice ?
          type NonNullableRole = NonNullable<Role>; // "ADMIN" | "USER"




          點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開更多互動和交流,掃描下方”二維碼“或在“公眾號后臺回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -


          瀏覽 31
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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精品久久久久 | 国产成人AV无码一区二区三区 | 黄色高清视频在线观看 | 无码区精品区一区二区三区 | 日韩视频五区 |