TypeScript 對映型別

admin發表於2018-08-06

在實際應用中,可能需要將現有型別轉換為可選,看如下程式碼例項:

[typescript] 純文字檢視 複製程式碼
interface Person {
  name: string;
  age: number;
  location: string;
}

將上面的介面型別中的屬性轉換為可選,程式碼如下:

[typescript] 純文字檢視 複製程式碼
interface PartialPerson {
  name?: string;
  age?: number;
  location?: string;
}

對映型別轉換可以使用如下方式:

[typescript] 純文字檢視 複製程式碼
type Partial<T> = {
  [P in keyof T]?: T[P];
};
type PartialPerson = Partial<Person>;

特別說明:Partial已經在TypeScript內建,還有一個常用的內建Readonly<T>,程式碼如下:

[typescript] 純文字檢視 複製程式碼
interface Person {
  name: string;
  age: number;
  location: string;
}
type ReadonlyPerson = Readonly<Person>;

再來看一段非內建的,程式碼例項如下:

[typescript] 純文字檢視 複製程式碼
interface Person {
  name: string;
  age: number;
  location: string;
}
let person:Person={
  name: "螞蟻部落",
  age: 4,
  location: "青島市南區"
}
// 從T中選取一組屬性K
declare function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K>;
const nameAndAgeOnly = pick(person, "name", "age");  // { name: string, age: number }

相關文章