본문으로 건너뛰기

2.20~2.24README

클래스는 값이면서 타입이다.

class Person{
name;
age;
married
constructer (name : string , age:number , married :boolean){
this.name = name
this.age = age
this.married = married
}
}

  • 자바스크립트와 다르게 클래스 내부에 넣어야한다.
  • 생성자 내부에 할당 없이 맴버로만 선언하면 생성자 안에서 애러가 발생한다.
  • 조금 더 엄격한 타입검사를 위해 implents를 사용할 수 있다.
  • 클래스 맴버로는 public, protected, private가 올 수 있따.
  • abstract를 사용하면 마찬가지로 interface처럼 타입검사를 사용할 수 있다.

public : 상속과 new로 만든 인스턴스에서 속성사용이 가능하다 private : 자신의 클래스에서만 속성 사용이 가능하다 protected : 자신의 클래스와 자손에서 속서 사용이 가능하다

enum은 자바스크립트에서도 사용할 수 있다.

  • enum은 열거형이다.
enum {
NOVICE,
INTERMEDIATE,
ADVACNED,
MASTER
}
  • 내부에 존재하는 이름을 맴버라고 부른다.
  • 문자열이나 정술르 할당할 수 있다.
  • 타입의 속성은 값으로 활용이 가능하다.
  • 보통 타입으로 많이 사용하며 타입으로 사용시 유니언과 비슷한 역활을 한다
  • enum타입은 브랜딩을 위해 많이 사용한다. 다만 이 때 같은 맴버끼리 비교해야 의미가 있음을 기억하자

infer로 타입스크립트 추론을 활용하자

  • infer 예약어는 타입스크립트의 타입 추론 기능을 극한까지 활용하는 기능입니다. 컨디셔널 타입과 함께 사용합니다.

  • 다음과 같은 상황에서 infer를 활용할 수 있습니다. 배열이 있을 때 배열의 요소 타입을 얻어내고 싶은 상황입니다.

type El<T> = T extends (infer E)[] ? E : never;
type Str = El<string[]>;
// type Str = string
type NumOrBool = El<(number | boolean)[]>;
// type NumOrBool = number | boolean

type El<T> = T extends (infer E)[] ? never : E;
// Cannot find name 'E'.
  • 타입스크립트에 추론을 맡기고 싶은 부분을 'infer 타입_변수'로 표시하면 됩니다. 예제에서는 E가 타입 변수(type variable)입니다.

  • 다만 컨디셔널 타입에서 타입 변수는 참 부분에서만 쓸 수 있습니다. 다음과 같이 거짓 부분에서 쓰려고 하면 에러가 발생합니다.

타입을 좁혀 정확한 타입을 얻어내자

if (param == undefined) {
param;
} else if (param == null) {
param;
}
  • 타입을 좁혀 추론하는것을 제어 흐름 분석이라 칭한다
  • 타입 좁히기에 꼭 typeof를 사용할 필요가 없다.
  • boolean으로 true | false구분이 사용 가능하다.
  • class함수의 경우 instanceof로 구분할 수 있다.
  • 타입 좁히기는 자바스크립트 문법을 사용해서 진행해야 한다.
  • 다만 객체의 경우는 오류가 발생하는데 이 경우 in을 사용할 수 있다.
if (width in param) {
}