본문 바로가기

개발/TS

[TS] TS Doc Handbook 1회독 - 7

Classes

Class Members

TS는 ES2015에서 소개된 class 키워드에 대해 모든 지원을 제공한다.

필드의 type annotation은 선택이지만 기본적으로 any로 설정된다.

 

--strictPropertyInitialization 옵션: 초기화와 생성자 함수에 대한 설정

 

필드는 생성자 자체에서 초기화되어야 하지만, 다른 수단을 통해 명확하게 초기화하는 경우에는 ! 연산자를 사용할 수 있다.

필드에서는 readonly 수정자를 사용할 수 있다.

 

생성자

생성자는 반환 타입 표기를 할 수 없고, 타입 파라미터를 가질 수 없다.

외부 클래스 선언

 

super call: TS에서 super를 호출하는 것을 깜박하면 알려줍니다.

 

메서드

타입 표기는 함수와 생성자와 동일하다. this를 통해 필드에 접근하는 건 필수이다. 그렇지 않으면 enclosing scope에서 찾아서 사용한다.

 

게터 세터

TS에서의 특별한 추론 규칙

  • 게터가 있는데 세터가 없다면, 해당 필드는 readonly
  • 만약 세터 파라미터의 타입이 없다면, 게터의 반환 타입으로 추론됨

인덱스 서명: 잘 이해가 안 됨

 

Class Heritage

implements clause를 사용해 interface를 만족했는지 확인합니다. 주의 사항으로 내부 메서드 파라미터의 타입을 추론하지 못하고, 옵셔널 속성의 경우 새로 추가할 수 없습니다.

 

extends clause를 사용해 기존 클래스를 상속할 수 있습니다. overriding을 할 수 있는데 부모 클래스에 접근하기 위해서는 super를 사용한다.

 

override 할 때 주의 사항은 기존 함수의 형식을 따라야 한다는 점입니다. 예를 들어 파라미터가 없다가 추가하는 경우 옵셔널을 사용해서 override 이전에 함수도 동작할 수 있도록 해야 합니다.

 

type only field declarations

TS의 설정 중 target이 ES2022 이상이거나 useDefineForClassFields가 true일 때 클래스의 필드 초기화는 부모 클래스의 생성자가 실행된 이후에 실행됩니다.

 

이때 초기화하는 값을 변경하고 싶은 게 아닌 타입을 변경하고 싶다면 declare를 사용하면 해결할 수 있다.

 

initialization order

  1. 부모 클래스 필드 초기화
  2. 부모 클래스 생성자 함수 실행
  3. 자식 클래스 필드 초기화
  4. 자식 클래스 생성자 함수 실행

inheriting built-in types

만약 Array, Error, Map과 같은 built-in type 상속을 사용할 일이 없거나 ES6/ES2015 이상을 타겟으로 한다면 해당 세션 패스

ES6(ES2015)에서 제공하는 super() 함수가 this의 처리를 자동으로 하는데 ES5 이전에는 해당 과정이 없기 때문에 내장 객체인 Error, Array를 상속하기 위해서는 __proto__를 사용해야 할 수 있다.

 

아직 JS의 클래스에 대한 이해 부족인 건지 전부를 다 이해할 수는 없었다.

 

참고

https://www.typescriptlang.org/docs/handbook/2/classes.html

'개발 > TS' 카테고리의 다른 글

[TS] TS Doc Handbook 1회독 - 9  (0) 2025.06.24
[TS] TS Doc Handbook 1회독 - 8  (0) 2025.06.20
[TS] TS Doc Handbook 1회독 - 6  (0) 2025.06.16
[TS] TS Doc Handbook 1회독 - 5  (1) 2025.06.13
[TS] TS Doc Handbook 1회독 - 4  (0) 2025.03.04