TypeScript의 확장 키워드는 일종의 스위스 군용 칼입니다. 상속, 제네릭 및 조건부 유형을 포함한 여러 컨텍스트에서 사용됩니다. 확장을 효과적으로 사용하는 방법을 이해하면 더욱 강력하고 재사용 가능하며 유형이 안전한 코드를 만들 수 있습니다.
확장의 주요 용도 중 하나는 상속입니다. 이를 통해 기존 인터페이스나 클래스를 기반으로 새 인터페이스나 클래스를 만들 수 있습니다.
interface User { firstName: string; lastName: string; email: string; } interface StaffUser extends User { roles: string[]; department: string; } const regularUser: User = { firstName: "John", lastName: "Doe", email: "[email protected]" }; const staffMember: StaffUser = { firstName: "Jane", lastName: "Smith", email: "[email protected]", roles: ["Manager", "Developer"], department: "Engineering" };
이 예에서 StaffUser는 User를 확장하여 모든 속성을 상속하고 새 속성을 추가합니다. 이를 통해 보다 일반적인 유형을 기반으로 보다 구체적인 유형을 만들 수 있습니다.
extends 키워드는 클래스 상속에도 사용됩니다.
class Animal { constructor(public name: string) {} makeSound(): void { console.log("Some generic animal sound"); } } class Dog extends Animal { constructor(name: string, public breed: string) { super(name); } makeSound(): void { console.log("Woof! Woof!"); } fetch(): void { console.log(`${this.name} is fetching the ball!`); } } const myDog = new Dog("Buddy", "Golden Retriever"); myDog.makeSound(); // Output: Woof! Woof! myDog.fetch(); // Output: Buddy is fetching the ball!
여기서 Dog는 Animal을 확장하여 해당 속성과 메서드를 상속하고 자체 속성도 추가합니다.
extends 키워드는 제네릭으로 작업할 때 매우 중요하며 제네릭 함수나 클래스와 함께 사용할 수 있는 유형을 제한할 수 있습니다.
interface Printable { print(): void; } function printObject(obj: T) { obj.print(); } class Book implements Printable { print() { console.log("Printing a book."); } } class Magazine implements Printable { print() { console.log("Printing a magazine."); } } const myBook = new Book(); const myMagazine = new Magazine(); printObject(myBook); // Output: Printing a book. printObject(myMagazine); // Output: Printing a magazine. // printObject(42); // Error, number doesn't have a 'print' method
요약하면 printObject
T extends U ? X : Y
type ExtractNumber= T extends number ? T : never; type NumberOrNever = ExtractNumber ; // number type StringOrNever = ExtractNumber ; // never
여기에서 ExtractNumber 유형은 유형 매개변수 T를 사용합니다. 조건부 유형은 T가 숫자 유형을 확장하는지 확인합니다. 그렇다면 유형은 T(숫자 유형)로 확인됩니다. 그렇지 않은 경우 유형은 never로 확인됩니다.
이제 A | 비 | C는 A를 확장합니다. 처음에는 직관에 어긋나는 것처럼 보일 수 있지만 TypeScript에서는 이 조건이 실제로 false입니다. 이유는 다음과 같습니다.
type Fruit = "apple" | "banana" | "cherry"; type CitrusFruit = "lemon" | "orange"; type IsCitrus= T extends CitrusFruit ? true : false; type Test1 = IsCitrus; // true type Test2 = IsCitrus; // false type Test3 = IsCitrus ; // false
이 예에서 IsCitrus
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3