타입스크립트는 ES2015에 소개된 class 키워드를 완전히 지원한다.

다른 자바스크립트 기능과 마찬가지로, 타입스크립트에서 클래스를 사용할 때 타입 주석을 사용할 수 있으며, 클래스와 다른 타입 사이의 관계를 표현할 수 있도록 기타 문법 또한 사용할 수 있다.

Table of contents

7.1. Class Members

다음은 가장 기초적인 클래스인 빈 클래스다.

class Point {}

이 클래스는 아직 그렇게 유용하지 못하다. 따라서 이제 클래스에 멤버를 추가해보자.

7.1.1. Fields

필드 선언은 퍼블릭 쓰기가능 프로퍼티를 클래스에 생성한다.

class Point {
	x: number;
	y: number;
}

const pt = new Point();
pt.x = 0;
pt.y = 0;

다른 곳과 마찬가지로, 타입 주석은 옵셔널이지만, 특정하지 않는다면 암묵적으로 any 타입이 할당된다.

필드는 *이니셜라이저(initializer)*를 가질 수 있다. 이니셜라이저는 클래스가 인스턴스화되면 자동적으로 실행될 것이다.

class Point {
	x = 0;
	y = 0;
}

const pt = new Point();
// Prints 0, 0
console.log(`${pt.x}, ${pt.y}`);

const, let, var 와 마찬가지로 클래스의 이니셜라이저는 그 타입을 추론할 때 사용할 수 있다.

const pt = new Point();
pt.x = '0';
// Type 'string' is not assignable to type 'number'.

7.1.2. --strictPropertyInitialization

--strictPropertyInitialization 설정은 생성자(constructor)에서 클래스 필드가 초기화되어야 하는지를 제어할 수 있게 해준다.

class BadGreeter {
	name: string;
}
// Property 'name' has no initializer 
// and is not definitely assigned in the constructor.
class GoodGreeter {
	name: string;

	constructor() {
		this.name = 'hello';
	}
}