亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

typescript如何使用映射類型

發布時間:2022-03-19 11:13:28 來源:億速云 閱讀:229 作者:小新 欄目:開發技術

這篇文章主要介紹了typescript如何使用映射類型,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

映射類型

在了解映射類型之前,需要了解 keyof, never, typeof, in。

keyof:keyof 取 interface 的鍵

interface Point {
    x: number;
    y: number;
}

// type keys = "x" | "y"
type keys = keyof Point;

never:永遠不存在的值的類型

官方描述:

the never type represents the type of values that never occur.

// 例子:進行編譯時的全面的檢查
type Foo = string | number;

function controlFlowAnalysisWithNever(foo: Foo) {
  if (typeof foo === "string") {
    // 這里 foo 被收窄為 string 類型
  } else if (typeof foo === "number") {
    // 這里 foo 被收窄為 number 類型
  } else {
    // foo 在這里是 never
    const check: never = foo;
  }
}

使用 never 避免出現新增了聯合類型沒有對應的實現,目的就是寫出類型絕對安全的代碼。

typeof:取某個值的 type

const a: number = 3

// 相當于: const b: number = 4
const b: typeof a = 4

in:檢查一個對象上是否存在一個屬性

interface A {
  x: number;
}

interface B {
  y: string;
}

function doStuff(q: A | B) {
  if ('x' in q) {
    // q: A
  } else {
    // q: B
  }
}

映射類型就是將一個類型映射成另外一個類型,簡單理解就是新類型以相同的形式去轉換舊類型的每個屬性。

Partial, Readonly, Nullable, Required

  • Partial 將每個屬性轉換為可選屬性

  • Readonly 將每個屬性轉換為只讀屬性

  • Nullable 轉換為舊類型和null的聯合類型

  • Required 將每個屬性轉換為必選屬性

type Partial<T> = {
    [P in keyof T]?: T[P];
}

type Readonly<T> = {
    readonly [P in keyof T]: T[P];
}

type Nullable<T> = { 
  [P in keyof T]: T[P] | null 
}

type Required<T> = {
  [P in keyof T]-?: T[P]
}

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

type PersonPartial = Partial<Person>;
type PersonReadonly = Readonly<Person>;
type PersonNullable = Nullable<Person>;

type PersonPartial = {
    name?: string | undefined;
    age?: number | undefined;
}

type PersonReadonly = {
    readonly name: string;
    readonly age: number;
}

type PersonNullable = {
      name: string | null;
      age: number | null;
}

interface Props {
  a?: number;
  b?: string;
}

const obj: Props = { a: 5 };

const obj2: Required<Props> = { a: 5 };
// Property 'b' is missing in type '{ a: number; }' but required in type 'Required<Props>'.

Pick, Record

  • Pick 選取一組屬性指定新類型

  • Record 創建一組屬性指定新類型,常用來聲明普通Object對象

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

type Record<K extends keyof any, T> = {
  [P in K]: T;
}

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

type TodoPreview = Pick<Todo, "title" | "completed">;

const todo: TodoPreview = {
  title: "Clean room",
  completed: false,
};

todo; // = const todo: TodoPreview


interface PageInfo {
  title: string;
}

type Page = "home" | "about" | "contact";

const nav: Record<Page, PageInfo> = {
  about: { title: "title1" },
  contact: { title: "title2" },
  home: { title: "title3" },
};

nav.about; // = const nav: Record

Exclude, Omit

  • Exclude 去除交集,返回剩余的部分

  • Omit 適用于鍵值對對象的Exclude,去除類型中包含的鍵值對

type Exclude<T, U> = T extends U ? never : T
type Omit = Pick<T, Exclude<keyof T, K>>

// 相當于: type A = 'a'
type A = Exclude<'x' | 'a', 'x' | 'y' | 'z'>

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

type TodoPreview = Omit<Todo, "description">;

const todo: TodoPreview = {
  title: "a",
  completed: false,
};

ReturnType

獲取返回值類型,一般為函數

type ReturnType<T extends (...args: any) => any>
  = T extends (...args: any) => infer R ? R : any;

declare function f1(): { a: number; b: string };
type T1 = ReturnType<typeof f1>;
//    type T1 = {
//        a: number;
//        b: string;
//    }

感謝你能夠認真閱讀完這篇文章,希望小編分享的“typescript如何使用映射類型”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永春县| 凤庆县| 高阳县| 赣州市| 克山县| 齐齐哈尔市| 玉环县| 砚山县| 砀山县| 克拉玛依市| 合水县| 盘锦市| 宣威市| 法库县| 华蓥市| 客服| 徐州市| 萨嘎县| 鄂托克前旗| 酒泉市| 桦南县| 乾安县| 会同县| 凌云县| 榆林市| 宜州市| 莱西市| 韶山市| 砀山县| 文水县| 襄垣县| 伊宁市| 肇庆市| 绥中县| 泽州县| 会东县| 东海县| 德阳市| 盐山县| 河源市| 于都县|