【TS】一些常用的工具類型


Partial

為所有屬性添加?這個midfier,也就是設置所有屬性都是可選屬性。

interface Person{
      name: string;
      age: number;
}

type NewPerson = Partial<Person>;
const p: NewPerson = {
      name: 'ashen';
};
// name和age都被設置成了可選屬性

Required

設置所有屬性都是必填的。

interface Person{
      name: string;
      age?: number;
}

type NewPerson = Required<Person>;
const p: NewPerson = {
      name: 'ashen'; // error age被設置成了必填屬性
};

Record

設置給定的可能屬性,都對應給定類型的“key:value”形式

type r = Record<'a'|'b'|'c', Person>;
// 最終實現 {a: Person; b: Person; c: Person}

Pick

將某個類型中的子屬性挑選出來

type NewPerson = Pick<Person, 'name'>;
// NewPerson變成:{name: string}

Exclude

將某個類型中的子屬性剔除

interface Animal{
      name: string;
      age: number;
      sex: string;
      sayHi: () => string;
      eat: string => void;
}

type Dog = Exclude<keyof Animal, 'sayHi'> // Dog類中包含除開sayHi的所有屬性

當我們需要對interface進行繼承時,如果像以下方式處理,會報錯

      interface Chicken {
          name: string;
          age: number;
          egg: number;
      }
      interface NewChicken extends Chicken {
          name: number;
      }

此時我們需要將不被overwrite的屬性提取出來,再進行繼承

      interface NewChicken extends pick<Chicken, 'age'|'egg'>{
          name: number;
      }

但是如果需要提取的屬性很多,難道要一個個列舉出來嗎?此時可以通過Exclude將name屬性剔除,再傳入Pick進行選擇

      interface NewChicken extends pick<Chicken, Exclude<keyof Chicken, 'name'>>{
          name: number;
      }

Omit

就是以上Pick和Exclude的結合

Parameters

得到函數參數類型組成的元祖類型

type A = Parameters<typeof Array.isArray> // [any]
type B = Parameters<typeof parseInt> // [number, (string | undefined)?]

ReturnType

得到函數返回值的類型

function testFunc(){
      return 123;
}
type A = ReturnType<typeof testFunc>; // number


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM