TypeScript
- 타입스크립트는 자바스크립트와 비슷하지만 타입을 설정해준다는 것에 차이가 있다,
타입 지정
- 타입을 지정할때는 첫글자를 대문자로 해준다.
- 타입스크립트는 타입의 안정성을 보장해주기 때문에 유용하다.
그런데 그렇다고 내가 모든 것들에 대해 타입을 지정해주는 것은 바람직하지 않다.
타입스크립트는 충분히 똑똑하기 때문에 내가 적은 것들에 대해 타입스크립트가 유추하도록 하는게 바람직하다.
- 물론 구체적으로 타입을 지정하고 싶을땐 지정하는게 맞지
Type checker
- 컴파일러와는 살짝 다른 개념으로 코드가 실행되기 전 오류를 잡아준다. 그래서 런타임오류를 예방할 수 있다.
- 주로 Type 오류를 잡는데 사용된다.
Alias
Function type & return type

- 함수의 타입은 위와 같이 지정된다.
:Player가 반환형태이고 :string처럼 인자의 형태까지 지정할 수 있다.
- 여기서
void라는 개념이 나오는데 이는 우리가 C와 C++에서 배운 void와 같은 의미로 반환을 하지 않겠다는 것이다.

Readonly & Tuple
Readonly

- readonly는 말그대로 읽기 전용이다. 값을 수정할 수 없다는 것을 타입으로 지정하는 것이다.
- 따라서
push()같은 배열을 수정하는 것은 불가능하고 map()같은 것은 값을 수정하는 것이 아니기에 가능하다.
Tuple

- 순서를 정하는 것이다. 저 순서의 타입이 아니라면 오류를 발생한다.
- 위의 사진에서는 string에 number을 대입하려해서 발생하는 오류이다.
Any
- 이는 JavaScript의 타입을 사용한다는 의미이다.

- a와 b라는 변수에 각각 배열과 boolean값을 넣어주었음에도
a+b가 오류를 발생시키지 않는다. 이는 자바스크립트와 같다.
void & unknown & never
void
- 아까 function type에서 설명했듯이 C와 C++에서의 void와 의미가 일맥상통한다.
- 타입스크립트에서는 함수가 값을 반환하지 않으면 자동으로 void형테가 된다.
unknown

- unknown은 아직 타입이 정해지지 않은 상태를 말한다. 그렇기 때문에 함수로 다른 타입과 연산을 진행할 수 없다.

- if문을 이용하여 타입을 확인하면 그 타입에 맞는 연산을 진행할 수 있다.
never

- never은 오류를 발생시킬때 주로 쓴다.
- 일어날 수 없는 것에 대한 형태를 뜻한다. 그래서 위의 함수에서 name은
string|number인데 if와 else if에서 두 타입을 모두 확인했으므로 다른 경우의 수는 존재하지 않는다. 그래서 나머지 else의 타입은 never이다.