any
와unknown
모두 타입에 대한 정보가 없을 때 여러 타입들을 허용할 수 있기 때문에 사용한다.- 둘의 차이점은
any
의 경우 타입 정보를 제공하지 않아도 되지만unknown
의 경우 타입 정보를 제공하지 않을 경우 에러가 발생한다.
- 타입 정보를 제공하거나 강제로 지정(단언)하는 방법으로 에러를 해결할 수 있다.
- 특히
any
의 경우 남용하여 사용하게 되면 타입스크립트의 사용 목적을 잃어버리기 때문에 특별한 경우가 아니라면 최대한 사용을 지양해야한다.
void
는 함수의 반환값이 없을 경우 반환값에 대한 타입으로 사용한다.never
는 논리적으로 도달할 수 없는 함수의 반환값에 대한 타입으로 사용한다.- 에러 객체를 던져 에러가 발생할 경우 애플리케이션이 작동을 멈추기 때문에 함수에서 반환할수 없는 경우,
while
문의 무한 루프로 코드가 끝나지 않는 경우never
타입을 사용할 수 있다.
tuple
은 원소의 갯수가 정해진 배열의 타입으로 정해진 위치의 갯수만큼 원소를 표시하는데 사용한다.number
타입의 인덱스로 접근하기 보다 비구조 할당을 통해 선언된 변수로 접근하는 방식이 가독성이 좋다.- 원소의 갯수가 정해지지 않았다면
spread
와 배열에 대한 타입을 명시해준다.
type alias
를 통해 새로운 타입을 직접 명시할 수 있다.- 객체 타입인 경우 속성의
key
문자열과value
의 타입이 동일해야한다.
- 문자열 리터럴 타입은 지정한 문자열 외에 다른 문자열을 할당할 경우 에러가 발생한다.
- 문자열을 입력할때 지정한 문자열을 자동으로 보여준다.
- 유니언 타입은 다중 타입으로 여러 타입에 대해
OR
연산자와 같이또는
의 의미를 가지고|
연산자를 사용한다.type alias
를 통해 만든 타입들을 유니언 타입으로 활용할 수 있다.- 로그인 성공, 실패에 대한 두 가지 타입을
LoginState
유니언 타입으로 관리할 수 있다.
loginCheck
함수는Promise
객체를 반환하고 실행되는 함수의 매개변수에 대한 타입이LoginState
유니언 타입으로 지정한다.- 성공, 실패 타입에
result
라는 동일한 속성에 다른 문자열 리터럴 타입으로 구분 지을 수 있다.- 위 코드에서는
resolve
,reject
함수로 분리하여 작성했지만resolve
로 모두 작성했을 경우res.result
목록에success, fail
모두 확인할 수 있다.
- 유니언 타입이
OR
연산자의 역할을 했다면intersection type
은AND
연산자의 역할을 한다.&
연산자를 사용하며 명시된 여러 타입들이 모두 만족을 해야 에러가 발생하지 않는다.name
,age
를 가지고 있는Student 타입
과employId
,work
를 가지고 있는worker 타입
을 모두 만족하는 객체만internWork 함수
의 인자로 전달해야한다.
enum
은 상수값들을 한 곳에 모아 정의하는 기능을 제공하는 타입이다.- 자바스크립트에서는 이 기능을 제공하지 않기 때문에 타입스크립에서 자체적으로 제공하는 타입이다.
enum
으로 선언한 타입의 변수는 타입 안에 선언된 다른 값들을 재할당할 수 있는 장점이 있다.- 하지만
number
타입 경우 안에 명시된 값 외에 다른 값을 할당할 수 있다는 문제점이 있다.- 유니온 타입은
enum
과 같은 역할을 하면서 동시에 타입을 보장하기 때문에enum
보다는 유니온 타입을 권장한다.