

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보다는 유니온 타입을 권장한다.