타입스크립트에서는 개별 타입들을 갖고 좀더 복합적인 타입을 만드는 것이 가능하다. 이를 할 수 있는 대표적인 방법 두 가지는 Unions와 Generics이다.
: '이 타입 또는 저 타입이다'
굳이 설명할 필요 없이 이 이미지를 보면 이해된다.
Union Type을 사용할 때는 주의할 점이 있는데 그건 바로
이런 식으로 한 쪽에만 있는 property를 사용하려고 하면 에러 표시가 뜬다는 점이다. 이때 타입스크립트가 해당 property를 갖고있는 type임을 인지할 수 있도록 narrow해주기 위해 코드 수정이 필요하다.
이 사진에서 typeof 연산자로 해당 값의 타입을 확인해서 분기 처리했더니 에러 표시가 사라진 것을 볼 수 있다.
이밖에도
이런 식으로 Array.isArray 메소드를 사용해서 narrow해줄 수도 있다.
하지만 만약
이런 식으로 Array와 string은 둘다 slice라는 property를 갖고 있기 때문에 괜찮은 상황에서는 narrow를 안 해줘도 된다.
자바에서의 제네릭과 유사하다. 제네릭은 타입에 가변적인 내부 타입을 지정할 수 있도록 해준다.
마지막 23은 현재 제네릭으로 string이 지정되어 있는데 number 타입의 값을 인자로 넘겨서 그렇다.
타입스크립트는 타입이 지정되지 않은 특정 객체나 클래스가 특정 타입에 부합하는지를 확인할 때, 해당 객체의 서브셋만 일치해도 타입에 부합하는 것으로 인정한다. 예를 들어,
이런 식으로 현재 Point 인터페이스에는 x: number, y: number만 있는데 추가 프로퍼티들을 가진 다른 것들도 문제없이 동작할 수 있다는 뜻이다.