super JavaScript처럼 TypeScript도 super 호출을 지원합니다. 자식 클래스가 부모 클래스에 정의된 메서드를 오버라이드하면 자식 인스턴스는 super를 이용해 부모 버전의 메서드를 호출할 수 있습니다. TypeScript는 다음처럼 두 가지 super 호출을 지원합니다. super.take 같은 메서드를 호출합니다. 생성자 함수에서만 호출할 수 있는 super()라는 특별한 타입의 생성자를 호출합니다. 자식 클래스에 생성자 함수가 있다면 super()를 호출해야 부모 클래스와 정상적으로 연결됩니다. (깜빡하고 잊으면 TypeScript가 경고를 해주니까 걱정할 필요가 없습니다.) super로 부모 클래스의 메서드에만 접근할 수 있고 프로퍼티엔 접근할 수 없다는 사실을 기억합시다.
클래스와 상속 체스 엔진을 만들려고 합니다. 해당 엔진은 두 명이 체스를 둘 수 있는 API를 제공합니다. 먼저 타입부터 정의해 보겠습니다. // 체스 게임 class Game{} // 체스 말 class Piece{} // 체스 말의 좌표 집합 class Position{} 체스에는 여섯 가지의 말(piece)이 있습니다. // 체스 게임 class Game{} // 체스 말 class Piece{} // 체스 말의 좌표 집합 class Position{} class King extends Piece {} // 킹 class Queen extends Piece{} // 퀸 class Bishop extends Piece{} // 비숍 class Knight extends Piece{} // 나이트 cl..
타입 주도 개발 강력한 타입 시스템은 큰 힘을 준다고 합니다. 그래서 TypeScript로 코드를 구현할 때 '타입을 추종하는' 자신을 발견하게 될 것이라고 합니다. 사람들은 이것을 타입 주도 개발이라 부릅니다. 타입 주도 개발(type-driven development) 타입 시그니처를 먼저 정하고 값을 나중에 채우는 프로그래밍 방식 표현식이 수용할 수 있는 값의 타입을 제한하는 것이 정적 타입 시스템의 핵심입니다. 표현력이 더 풍부한 타입 시스템일수록 표현식 안의 값을 더 잘 설명할 수 있습니다. 표현력이 높은 타입 시스템을 함수에 적용하면 함수 타입 시그니처를 통해 함수에 관하여 원하는 거의 모든 정보를 얻을 수 있습니다. function map(array: T[], f: (item: T) => U..
제네릭 타입 기본값 함수 매개변수에 기본값을 설정할 수 있듯이 제네릭 타입 매개변수에도 기본 타입을 지정할 수 있습니다. type SecondEvent = { target: T type: string } 새 이벤트를 만들려면 제네릭 타입을 SecondEvent로 명시적으로 한정하여 이벤트가 발생한 HTML 요소를 정확히 가리켜야 합니다. type SecondEvent = { target: T type: string } let buttonEvent: SecondEvent = { target: secondEvent, type: string } 특정 요소 타입을 알 수 없는 때를 대비해 SecondEvent의 제네릭 타입에 기본값을 추가할 수 있습니다. type SecondEvent = { target: T ..