溫馨提示×

溫馨提示×

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

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

typeScript的extends關鍵字怎么使用

發布時間:2023-03-28 15:24:24 來源:億速云 閱讀:189 作者:iii 欄目:開發技術

TypeScript的extends關鍵字怎么使用

目錄

  1. 引言
  2. TypeScript中的extends關鍵字概述
  3. 類繼承中的extends
  4. 接口繼承中的extends
  5. 泛型約束中的extends
  6. 條件類型中的extends
  7. 高級類型中的extends
  8. 類型推斷中的extends
  9. 類型保護中的extends
  10. 類型兼容性中的extends
  11. 類型別名中的extends
  12. 類型映射中的extends
  13. 類型操作中的extends
  14. 類型工具中的extends
  15. 類型系統設計中的extends
  16. 類型安全中的extends
  17. 類型擴展中的extends
  18. 類型推斷中的extends
  19. 類型保護中的extends
  20. 類型兼容性中的extends
  21. 類型別名中的extends
  22. 類型映射中的extends
  23. 類型操作中的extends
  24. 類型工具中的extends
  25. 類型系統設計中的extends
  26. 類型安全中的extends
  27. 類型擴展中的extends
  28. 總結

引言

TypeScript 是一種由微軟開發的開源編程語言,它是 JavaScript 的一個超集,添加了可選的靜態類型和基于類的面向對象編程。TypeScript 的設計目標是開發大型應用,并且可以編譯成純 JavaScript,從而在任何瀏覽器、任何計算機和任何操作系統上運行。

在 TypeScript 中,extends 關鍵字是一個非常重要的概念,它在類繼承、接口繼承、泛型約束、條件類型等多個場景中都有廣泛的應用。本文將詳細探討 extends 關鍵字在 TypeScript 中的各種用法,并通過豐富的示例代碼幫助讀者深入理解其工作原理。

TypeScript中的extends關鍵字概述

extends 關鍵字在 TypeScript 中主要用于以下幾個方面:

  1. 類繼承:用于創建一個類繼承另一個類的屬性和方法。
  2. 接口繼承:用于創建一個接口繼承另一個接口的屬性和方法。
  3. 泛型約束:用于限制泛型參數的類型范圍。
  4. 條件類型:用于在類型系統中進行條件判斷。
  5. 高級類型:用于創建復雜的類型組合和操作。

接下來,我們將逐一探討這些用法。

類繼承中的extends

在 TypeScript 中,類繼承是通過 extends 關鍵字實現的。通過繼承,子類可以繼承父類的屬性和方法,并且可以添加新的屬性和方法,或者重寫父類的方法。

基本語法

class Parent {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    greet(): void {
        console.log(`Hello, ${this.name}`);
    }
}

class Child extends Parent {
    age: number;

    constructor(name: string, age: number) {
        super(name);
        this.age = age;
    }

    greet(): void {
        super.greet();
        console.log(`I am ${this.age} years old.`);
    }
}

const child = new Child("Alice", 10);
child.greet();

解釋

  • Parent 類有一個 name 屬性和一個 greet 方法。
  • Child 類通過 extends 關鍵字繼承了 Parent 類,并添加了一個 age 屬性。
  • Child 類重寫了 greet 方法,并在其中調用了父類的 greet 方法。

輸出

Hello, Alice
I am 10 years old.

注意事項

  • 子類的構造函數必須調用 super(),以初始化父類的屬性。
  • 子類可以重寫父類的方法,但也可以通過 super 關鍵字調用父類的方法。

接口繼承中的extends

在 TypeScript 中,接口繼承也是通過 extends 關鍵字實現的。通過繼承,子接口可以繼承父接口的屬性和方法,并且可以添加新的屬性和方法。

基本語法

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

interface Employee extends Person {
    employeeId: number;
}

const employee: Employee = {
    name: "Alice",
    age: 30,
    employeeId: 12345
};

console.log(employee);

解釋

  • Person 接口定義了 nameage 屬性。
  • Employee 接口通過 extends 關鍵字繼承了 Person 接口,并添加了一個 employeeId 屬性。
  • employee 對象實現了 Employee 接口,因此必須包含 name、ageemployeeId 屬性。

輸出

{ name: 'Alice', age: 30, employeeId: 12345 }

注意事項

  • 接口繼承可以多重繼承,即一個接口可以繼承多個接口。
  • 接口繼承的屬性和方法必須是兼容的,否則會導致類型錯誤。

泛型約束中的extends

在 TypeScript 中,泛型約束是通過 extends 關鍵字實現的。通過泛型約束,可以限制泛型參數的類型范圍,從而確保類型安全。

基本語法

function printLength<T extends { length: number }>(arg: T): void {
    console.log(arg.length);
}

printLength("Hello"); // 5
printLength([1, 2, 3]); // 3
printLength({ length: 10 }); // 10

解釋

  • printLength 函數接受一個泛型參數 T,并且 T 必須滿足 { length: number } 的約束。
  • 這意味著 T 必須是一個具有 length 屬性的對象,且 length 屬性的類型為 number。
  • 因此,printLength 函數可以接受字符串、數組和具有 length 屬性的對象。

輸出

5
3
10

注意事項

  • 泛型約束可以用于函數、類和接口中。
  • 泛型約束可以結合多個條件,使用 & 符號進行組合。

條件類型中的extends

在 TypeScript 中,條件類型是通過 extends 關鍵字實現的。條件類型允許根據類型關系進行條件判斷,從而生成不同的類型。

基本語法

type IsString<T> = T extends string ? true : false;

type A = IsString<"hello">; // true
type B = IsString<123>; // false

解釋

  • IsString 是一個條件類型,它接受一個泛型參數 T。
  • 如果 Tstring 類型的子類型,則 IsString<T>true,否則為 false。
  • A 的類型為 true,因為 "hello"string 類型的子類型。
  • B 的類型為 false,因為 123 不是 string 類型的子類型。

輸出

true
false

注意事項

  • 條件類型可以嵌套使用,從而創建更復雜的類型判斷。
  • 條件類型可以用于類型推斷、類型映射等高級類型操作。

高級類型中的extends

在 TypeScript 中,extends 關鍵字還可以用于創建高級類型,如聯合類型、交叉類型、映射類型等。

聯合類型

type A = string | number;

function printValue(value: A): void {
    console.log(value);
}

printValue("Hello"); // Hello
printValue(123); // 123

解釋

  • A 是一個聯合類型,表示 stringnumber 類型。
  • printValue 函數接受一個 A 類型的參數,因此可以接受 stringnumber 類型的值。

輸出

Hello
123

交叉類型

type A = { name: string };
type B = { age: number };

type C = A & B;

const person: C = {
    name: "Alice",
    age: 30
};

console.log(person);

解釋

  • AB 是兩個接口類型。
  • C 是一個交叉類型,表示同時具有 AB 的屬性和方法。
  • person 對象實現了 C 類型,因此必須包含 nameage 屬性。

輸出

{ name: 'Alice', age: 30 }

映射類型

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

type Person = {
    name: string;
    age: number;
};

type ReadonlyPerson = Readonly<Person>;

const person: ReadonlyPerson = {
    name: "Alice",
    age: 30
};

// person.name = "Bob"; // Error: Cannot assign to 'name' because it is a read-only property.

解釋

  • Readonly 是一個映射類型,它將 T 類型的所有屬性設置為只讀。
  • Person 是一個普通接口類型。
  • ReadonlyPersonPerson 的只讀版本,因此 person 對象的屬性不能被修改。

輸出

{ name: 'Alice', age: 30 }

注意事項

  • 高級類型可以結合使用,從而創建更復雜的類型組合。
  • 高級類型可以用于類型推斷、類型映射等高級類型操作。

類型推斷中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型推斷,從而根據類型關系推斷出更具體的類型。

基本語法

type A = string | number;

function printValue<T extends A>(value: T): void {
    console.log(value);
}

printValue("Hello"); // Hello
printValue(123); // 123

解釋

  • A 是一個聯合類型,表示 stringnumber 類型。
  • printValue 函數接受一個泛型參數 T,并且 T 必須滿足 A 的約束。
  • 因此,printValue 函數可以接受 stringnumber 類型的值。

輸出

Hello
123

注意事項

  • 類型推斷可以結合泛型約束、條件類型等高級類型操作。
  • 類型推斷可以用于類型推斷、類型映射等高級類型操作。

類型保護中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型保護,從而在運行時判斷變量的類型。

基本語法

function isString(value: any): value is string {
    return typeof value === "string";
}

function printValue(value: string | number): void {
    if (isString(value)) {
        console.log(`String: ${value}`);
    } else {
        console.log(`Number: ${value}`);
    }
}

printValue("Hello"); // String: Hello
printValue(123); // Number: 123

解釋

  • isString 是一個類型保護函數,它判斷 value 是否為 string 類型。
  • printValue 函數接受一個 stringnumber 類型的參數。
  • printValue 函數中,通過 isString 函數判斷 value 的類型,并根據類型輸出不同的結果。

輸出

String: Hello
Number: 123

注意事項

  • 類型保護可以結合類型推斷、條件類型等高級類型操作。
  • 類型保護可以用于類型推斷、類型映射等高級類型操作。

類型兼容性中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型兼容性判斷,從而判斷一個類型是否是另一個類型的子類型。

基本語法

type A = string;
type B = string | number;

type C = A extends B ? true : false; // true

解釋

  • Astring 類型。
  • Bstring | number 類型。
  • C 是一個條件類型,它判斷 A 是否是 B 的子類型。
  • 由于 stringstring | number 的子類型,因此 C 的類型為 true。

輸出

true

注意事項

  • 類型兼容性可以結合類型推斷、條件類型等高級類型操作。
  • 類型兼容性可以用于類型推斷、類型映射等高級類型操作。

類型別名中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型別名,從而創建更復雜的類型別名。

基本語法

type A = string;
type B = A extends string ? true : false; // true

解釋

  • Astring 類型。
  • B 是一個條件類型,它判斷 A 是否是 string 類型的子類型。
  • 由于 Astring 類型,因此 B 的類型為 true。

輸出

true

注意事項

  • 類型別名可以結合類型推斷、條件類型等高級類型操作。
  • 類型別名可以用于類型推斷、類型映射等高級類型操作。

類型映射中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型映射,從而創建更復雜的類型映射。

基本語法

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

type Person = {
    name: string;
    age: number;
};

type ReadonlyPerson = Readonly<Person>;

const person: ReadonlyPerson = {
    name: "Alice",
    age: 30
};

// person.name = "Bob"; // Error: Cannot assign to 'name' because it is a read-only property.

解釋

  • Readonly 是一個映射類型,它將 T 類型的所有屬性設置為只讀。
  • Person 是一個普通接口類型。
  • ReadonlyPersonPerson 的只讀版本,因此 person 對象的屬性不能被修改。

輸出

{ name: 'Alice', age: 30 }

注意事項

  • 類型映射可以結合類型推斷、條件類型等高級類型操作。
  • 類型映射可以用于類型推斷、類型映射等高級類型操作。

類型操作中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型操作,從而創建更復雜的類型操作。

基本語法

type A = string;
type B = number;

type C = A extends string ? B extends number ? true : false : false; // true

解釋

  • Astring 類型。
  • Bnumber 類型。
  • C 是一個條件類型,它判斷 A 是否是 string 類型的子類型,并且 B 是否是 number 類型的子類型。
  • 由于 Astring 類型,且 Bnumber 類型,因此 C 的類型為 true。

輸出

true

注意事項

  • 類型操作可以結合類型推斷、條件類型等高級類型操作。
  • 類型操作可以用于類型推斷、類型映射等高級類型操作。

類型工具中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型工具,從而創建更復雜的類型工具。

基本語法

type A = string;
type B = number;

type C = A extends string ? B extends number ? true : false : false; // true

解釋

  • Astring 類型。
  • Bnumber 類型。
  • C 是一個條件類型,它判斷 A 是否是 string 類型的子類型,并且 B 是否是 number 類型的子類型。
  • 由于 Astring 類型,且 Bnumber 類型,因此 C 的類型為 true。

輸出

true

注意事項

  • 類型工具可以結合類型推斷、條件類型等高級類型操作。
  • 類型工具可以用于類型推斷、類型映射等高級類型操作。

類型系統設計中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型系統設計,從而創建更復雜的類型系統。

基本語法

type A = string;
type B = number;

type C = A extends string ? B extends number ? true : false : false; // true

解釋

  • Astring 類型。
  • Bnumber 類型。
  • C 是一個條件類型,它判斷 A 是否是 string 類型的子類型,并且 B 是否是 number 類型的子類型。
  • 由于 Astring 類型,且 Bnumber 類型,因此 C 的類型為 true。

輸出

true

注意事項

  • 類型系統設計可以結合類型推斷、條件類型等高級類型操作。
  • 類型系統設計可以用于類型推斷、類型映射等高級類型操作。

類型安全中的extends

在 TypeScript 中,extends 關鍵字還可以用于類型安全,從而確保類型安全。

基本語法

type A = string;
type B = number;

type C = A extends string ? B extends number ? true : false : false; // true

解釋

  • Astring 類型。
  • B 是 `number
向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女