做政府網(wǎng)站話術(shù)seo系統(tǒng)是什么意思
介紹
extends 關(guān)鍵字在 TypeScript 中有多種應(yīng)用,包括泛型約束、繼承類、接口繼承和條件類型。通過靈活使用 extends,TypeScript 提供了豐富的工具來增強(qiáng)類型安全性,使代碼更具表現(xiàn)力和可維護(hù)性。
1. 約束接口的繼承
extends 關(guān)鍵字也可用于接口。通過接口繼承,我們可以創(chuàng)建一個(gè)繼承另一個(gè)接口的新接口,并添加額外的屬性或方法。
interface Person {name: string;age: number;
}interface Employee extends Person {employeeId: number;
}const employee: Employee = {name: "John",age: 30,employeeId: 12345
};
2. 約束類的繼承
在 TypeScript 中,extends 關(guān)鍵字也用于類的繼承。子類可以繼承父類的屬性和方法,并在需要時(shí)進(jìn)行重寫。
class Animal {name: string;constructor(name: string) {this.name = name;}
}class Dog extends Animal {breed: string;constructor(name: string, breed: string) {super(name);this.breed = breed;}
}const myDog = new Dog("Fido", "Golden Retriever");
console.log(myDog.name); // 訪問父類屬性
console.log(myDog.breed); // 訪問子類屬性
3. 約束泛型類型參數(shù)
在 TypeScript 中,泛型(generics)使我們能夠編寫可重用的函數(shù)、類和組件,同時(shí)保持類型的安全性。extends 關(guān)鍵字在泛型中常常用于約束泛型類型參數(shù),以確保傳入的類型符合某些要求。
function lengthOfArray<T>(arr: T[]): number {return arr.length;
}const numbers = [1, 2, 3];
const result = lengthOfArray(numbers);
在上面的示例中,T 是泛型類型參數(shù),它可以是任何類型。但有時(shí)我們希望泛型參數(shù)必須是某種類型的子類型。這時(shí)可以使用 extends 關(guān)鍵字來添加約束:
function firstElement<T extends Array<any>>(arr: T): T[0] {return arr[0];
}const numbers = [1, 2, 3];
const firstNum = firstElement(numbers); // firstNum 的類型是 number
<T extends Array> 表示 T 必須是 Array 或其子類型。這確保了傳入的參數(shù) arr 是一個(gè)數(shù)組,從而允許我們安全地訪問其第一個(gè)元素。
4.條件類型
在 TypeScript 2.8+ 中,extends 關(guān)鍵字還被用于條件類型。條件類型使我們能夠基于類型參數(shù)的屬性來確定最終的類型。
type NonNullable<T> = T extends null | undefined ? never : T;const x: string | null = "hello";
const y: string = x; // 編譯通過const a: string | null = null;
const b: string = a; // 報(bào)錯(cuò)
在上述示例中,NonNullable 是一個(gè)條件類型,它檢查泛型類型 T 是否是 null 或 undefined,如果是,則返回 never 類型,否則返回 T 類型。這允許我們確保某個(gè)值不會為 null 或 undefined。