最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript中extends關鍵字的使用場景及說明

 更新時間:2026年04月02日 09:51:15   作者:阿珊和她的貓  
本文介紹了TypeScript中extends關鍵字的應用,包括類繼承、泛型約束和接口繼承三種場景,類繼承實現(xiàn)功能擴展和多態(tài);泛型約束確保類型安全;接口繼承增強接口功能,通過具體示例展示了extends在不同場景下的用法

在 TypeScript 中,extends 關鍵字是實現(xiàn)類繼承和泛型約束的核心語法。它允許開發(fā)者通過繼承擴展類的功能,或者通過約束泛型參數(shù)來增強代碼的靈活性和安全性。

本文將詳細介紹 extends 關鍵字在不同場景下的使用方法和實際案例。

一、類繼承中的extends

(一)定義與作用

在 TypeScript 中,extends 關鍵字用于表示一個類繼承自另一個類。子類可以繼承父類的屬性和方法,并可以添加新的屬性和方法或覆蓋父類的方法。

基礎語法

class Parent {
  constructor(public name: string) {}

  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

class Child extends Parent {
  constructor(name: string, public age: number) {
    super(name); // 調用父類的構造函數(shù)
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old`);
  }
}

在這個例子中,Child 類繼承了 Parent 類。Child 類通過 super 調用了父類的構造函數(shù),并添加了一個新的屬性 age 和一個覆蓋的 greet 方法。

(二)使用場景

擴展功能

通過繼承,子類可以擴展父類的功能,同時保持代碼的復用性。

class Animal {
  constructor(public name: string) {}

  makeSound() {
    console.log(`${this.name} makes a sound`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  makeSound() {
    console.log(`${this.name} barks`);
  }
}

在這個例子中,Dog 類繼承了 Animal 類,并覆蓋了 makeSound 方法,以實現(xiàn)特定的行為。

實現(xiàn)多態(tài)

繼承是實現(xiàn)多態(tài)的基礎。通過繼承,子類可以覆蓋父類的方法,從而實現(xiàn)不同的行為。

class Shape {
  draw() {
    console.log("Drawing a shape");
  }
}

class Circle extends Shape {
  draw() {
    console.log("Drawing a circle");
  }
}

class Square extends Shape {
  draw() {
    console.log("Drawing a square");
  }
}

function drawShape(shape: Shape) {
  shape.draw();
}

const circle = new Circle();
const square = new Square();

drawShape(circle); // 輸出: Drawing a circle
drawShape(square); // 輸出: Drawing a square

在這個例子中,CircleSquare 類繼承了 Shape 類,并覆蓋了 draw 方法。drawShape 函數(shù)可以接受任何 Shape 類型的對象,并調用其 draw 方法,從而實現(xiàn)多態(tài)。

二、泛型約束中的extends

(一)定義與作用

在泛型中,extends 關鍵字用于約束泛型參數(shù)的類型。通過 extends,可以指定泛型參數(shù)必須是某個類型或其子類型的實例。

基礎語法

function getProperty<T, K extends keyof T>(obj: T, key: K) {
  return obj[key];
}

const obj = { a: 1, b: 'hello' };
const value = getProperty(obj, 'b'); // value 的類型是 'hello'

在這個例子中,泛型參數(shù) K 被約束為 T 的鍵類型(keyof T)。這確保了 key 參數(shù)必須是 obj 的有效鍵。

(二)使用場景

約束泛型參數(shù)

通過 extends,可以確保泛型參數(shù)滿足特定的條件,從而提高代碼的安全性和可讀性。

class Component<T extends HTMLElement> {
  constructor(public element: T) {}

  getInnerText(): string {
    return this.element.innerText;
  }
}

const divComponent = new Component(document.createElement('div'));
console.log(divComponent.getInnerText()); // 輸出: 空字符串

在這個例子中,Component 類的泛型參數(shù) T 被約束為 HTMLElement 或其子類型。這確保了 element 屬性是一個有效的 DOM 元素。

實現(xiàn)高級類型模式

extends 可以用于實現(xiàn)更復雜的類型模式,如條件類型和映射類型。

type MyType<T extends string | number> = T extends string ? { value: T } : { value: number };

const strType: MyType<string> = { value: 'hello' };
const numType: MyType<number> = { value: 42 };

在這個例子中,MyType 是一個條件類型,根據(jù)泛型參數(shù) T 的類型返回不同的結構。

三、接口繼承中的extends

(一)定義與作用

在接口中,extends 關鍵字用于表示一個接口繼承自另一個接口。子接口可以擴展父接口的屬性和方法。

基礎語法

interface Animal {
  name: string;
  makeSound(): void;
}

interface Dog extends Animal {
  bark(): void;
}

function getAnimalSound(animal: Animal) {
  animal.makeSound();
}

const myDog: Dog = {
  name: 'Buddy',
  makeSound() {
    console.log(`${this.name} makes a sound`);
  },
  bark() {
    console.log(`${this.name} barks`);
  }
};

getAnimalSound(myDog); // 輸出: Buddy makes a sound

在這個例子中,Dog 接口繼承了 Animal 接口,并添加了一個新的方法 bark。

(二)使用場景

擴展接口功能

通過繼承,接口可以擴展其他接口的功能,同時保持代碼的復用性。

interface Shape {
  draw(): void;
}

interface Circle extends Shape {
  radius: number;
}

interface Square extends Shape {
  sideLength: number;
}

function drawShape(shape: Shape) {
  shape.draw();
}

const myCircle: Circle = {
  radius: 5,
  draw() {
    console.log(`Drawing a circle with radius ${this.radius}`);
  }
};

const mySquare: Square = {
  sideLength: 4,
  draw() {
    console.log(`Drawing a square with side length ${this.sideLength}`);
  }
};

drawShape(myCircle); // 輸出: Drawing a circle with radius 5
drawShape(mySquare); // 輸出: Drawing a square with side length 4

在這個例子中,CircleSquare 接口繼承了 Shape 接口,并添加了特定的屬性。

四、總結

extends 關鍵字在 TypeScript 中用于實現(xiàn)類繼承、泛型約束和接口繼承。通過 extends,可以擴展類和接口的功能,約束泛型參數(shù)的類型,從而提高代碼的復用性、安全性和靈活性。

希望本文能夠幫助你更好地理解和使用 extends 關鍵字,提升你的 TypeScript 開發(fā)能力。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

涡阳县| 贡嘎县| 万州区| 怀仁县| 高要市| 新民市| 水富县| 康保县| 凤阳县| 阿荣旗| 乌审旗| 克拉玛依市| 新闻| 苏尼特右旗| 松阳县| 永春县| 佳木斯市| 册亨县| 勃利县| 宁强县| 宁阳县| 金寨县| 昌图县| 三都| 辽宁省| 东海县| 江油市| 黄浦区| 张北县| 上犹县| 文山县| 公主岭市| 德钦县| 沿河| 新干县| 临高县| 神农架林区| 永城市| 和林格尔县| 昌乐县| 双峰县|