타입스크립트 타입시스템의 특징

2024-06-13

동적타입 vs 정적타입 : 변수 선언시에 타입이 결정되는지 유무 강타입 vs 약타입 : 암시적 타입변환이 일어나는지 유무 등 (타입시스템이 얼마나 강하게 작동하는지를 의미)

정적타입, 강타입 등의 용어에 대해 엄밀한 정의가 내려져 있지는 않지만, 통상 사람들의 입에 오르내리는 는 없지만 이 정도로 구분해서 쓸 수 있다. (출처 : MDN & 강/약타입 - 위키백과)

예를들면 파이썬이 약타입이라고 생각하는 사람이 많은데, 파이썬은 동적타입일 뿐,동적타입이면서, **강타입**이다. 반면 JS는 동적타입,약타입이다.

익명함수는 사용처를 보고 타입추론한다.

익명함수는 타입명시해주지않아도, 문맥을 통해 인자의 타입 추론한다. 문맥적 타입부여 (함수선언문에서는 문맥적 타입부여를 않는다.) 따라서 인자의 타입선언도 필요없을 수 있다.

유니언타입 좁히려면 (동적타입검사)

  1. typeof 사용. typeof id === 'string'
  2. Array.isArray 같은 함수 사용 --아래는 그냥 내 경험
  3. 타입가드함수 만들어서쓰기 (그냥내가쓴것)
  4. instanceof

인터페이스 vs 타입. 차이

인터페이스는 타입과 달리 개방(확장)이 가능하다.

그냥 확장은 둘다가능 인터페이스 : extends로 확장 타입 : &로 가능 (인터페이스는 & 불가능)

하지만 인터페이스는 객체가 interface에 없는 키를 더가지는건 괜찮음 반면 타입은 완전히 동일해야함.

그냥 interface 쓰다가 문제발생시에 type 사용하면된다.

타입단언

타입단언은 타입검사를 건너뛰어주는 효과임. 타입캐스트로 비유하자면, upcast, downcast 둘다가능. 하지만 string에서 number로 처럼 아예무관한 변환은 불가능. const x = 'hello' as number (X) 이걸 파훼하는법은 우선 any나 unknown으로 먼저 변환하면됨 const x = ('hello' as any) as number;

리터럴 타입

as const를 사용하면 객체를 리터럴타입으로 바꿔줄수있음.