클래스는 값과 타입을 모두 선언한다 TypeScript의 거의 모든 것은 값 아니면 타입입니다. // 값 let a = 1999 function b(){} // 타입 type a = number interface b { (): void } 값과 타입은 TypeScript에서 별도의 네임스페이스에 존재합니다. 용어를 어떻게 사용하는지를 보고 TypeScript가 알아서 이를 값 또는 타입으로 해석합니다. // 값 let a = 1999 function b(){} // 타입 type a = number interface b { (): void } if(a + 1 > 3){ // 문맥상 값 a로 추론 let x: a = 3 // 문맥상 타입 a로 추론 } 문맥을 파악해 해석하는 이 기능은 정말 유용합니다. 한..
클래스는 구조 기반 타입을 지원한다 TypeScript는 클래스를 비교할 때 다른 타입과 달리 이름이 아니라 구조를 기준으로 삼습니다. 클래스는 자신과 똑같은 프로퍼티와 메서드를 정의하는 기존의 일반 객체를 포함해 클래스의 형태를 공유하는 다른 모든 타입과 호환됩니다. 예를 들어 TypeScript에선 Zebra를 인수로 받는 함수에 Poodle을 전달한다고 해서 반드시 에러를 발생시키진 않기 때문입니다. class Zebra { trot(){ // 블라블라 } } class Poodle { trot() { // 여기도 블라블라 } } function ambleAround(animal: Zebra){ animal.trot() } let zebra = new Zebra let poodle = new Poo..
클래스와 상속 체스 엔진을 만들려고 합니다. 해당 엔진은 두 명이 체스를 둘 수 있는 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..