반응형
할당성(assignability)
서브 타입과 슈퍼 타입의 관계는 모든 정적 타입 언어에서 중요한 개념입니다.
또한 할당성(assignability)이 어떻게 동작하는지 이해하는데도 중요합니다.
할당성이란 A라는 타입을 다른 B라는 타입이 필요한 곳에 사용할 수 있는지를 결정하는 TypeScript 규칙을 의미합니다.
"A를 B에 할당할 수 있는가?"라는 질문이 발생하면 TypeScript는 다음과 같은 몇 가지 규칙에 따라 처리합니다.
배열, 불(boolean), 숫자, 객체, 함수, 클래스, 클래스 인스턴스, 문자열, 리터럴 타입 등 열거형이 아닌 타입에선 다음의 규칙으로 A를 B에 할당할 수 있는지 결정합니다.
- A <: B
- A는 any
규칙 1은 서브 타입이 무엇인지 정의할 뿐입니다. A가 B의 서브 타입이면 B가 필요한 곳에는 A를 사용할 수 있습니다.
규칙 2는 예외를 설명하며, JavaScript 코드와 상호 운용할 때 유용합니다.
enum이나 const enum 키워드로 만드는 열거형 타입에선 다음 조건 중 하나를 만족해야 A타입을 열거형 B에 할당할 수 있습니다.
- A는 열거형 B의 멤버이다.
- B는 number 타입의 멤버를 최소 한 개 이상 가지고 있으며 A는 number이다.
규칙 1은 단순 타입과 내용이 같습니다.(A가 열거형 B의 멤버면 A의 타입은 B이고 따라서 B <: B라 말할 수 있습니다.)
규칙 2는 열거형을 처리할 때 편리하게 적용할 수 있습니다.
그러나 규칙 2로 인해 TypeScript의 안전성이 많이 떨어지니 과감하게 열거형을 코드에서 없앨 것을 권장합니다.
반응형
'👶 TypeScript' 카테고리의 다른 글
타입 넓히기 - 초과 프로퍼티 확인 (0) | 2023.01.18 |
---|---|
타입 넓히기 - const 타입 (0) | 2023.01.18 |
함수 가변성 (0) | 2023.01.18 |
형태와 배열 가변성 (0) | 2023.01.18 |
가변성 (0) | 2023.01.17 |