코드를 열심히 짜다보면
이런 식으로 매우 길고 복잡하게 타입을 나열하는 경우가 많아진다.
너무 길고 보기싫을 때, 나중에 또 사용을 하고 싶을 때 변수에 담아 써보도록 하자.
변수 만드는 것 처럼 type이라는 키워드를 쓰면 된다.
type 키워드 쓰는 것을 type alias라고 한다.
alias를 번역하면 별칭이라는 뜻이지만 변수라고 생각하면 된다.
type 타입변수명 = 타입종류;
타입을 변수처럼 만들어서 쓰는 alias 문법이다. 관습적으로 대문자로 시작한다.
일반 자바스크립트 변수랑 차별을 두기 위해 파스칼케이스로 작명하는 것이 좋다.
object에 타입지정할 때는 이렇게 하면 된다.
type 키워드를 쓰지 않으면 이렇게 만들어야 하는데 🔻
정리 되지 않아 좋은 코드는 아니다.
자바스크립트 문법 중, const 변수가 있다. const 변수는 값이 변하지 않는 변수를 만들고 싶을 때 const를 쓰면 된다. 재할당시 에러가 나기 때문에 값이 변하는 것을 미리 감지하고 차단할 수 있기 때문에..
그런데 object 자료를 const에 집어넣어도 object 내부는 마음대로 변경 할 수 있다.
const 변수는 재할당만 막아줄 뿐이지 그 안에 있는 object 속성 바꾸는 것 까지는 관여하지 않기 때문이다.
object 속성을 바뀌지 않게 막고 싶으면 타입스크립트 문법을 쓰면 된다.
readonly
키워드는 속성 왼쪽에 붙일 수 있으며 특정 속성을 변경할 수 없게 잠궈준다.
한 번 부여된 후에 앞으로 바뀌면 안되는 속성들을 readonly로 잠구면 된다.
(물론 readonly는 컴파일시 에러를 내는 것이고 변환된 js파일에서는 잘 바뀐다.???)
그러니까 어떤 object 자료는 name, age 속성이 둘 다 필요하지만,, 다른 object 자료에서는 age 속성이 선택사항이라면 type alias를 여러개 만들어야하는 것이 아니라 물음표연산자만 추가하면 된다.
사실 ?
기호는 "undefined라는 타입도 가질 수 있다"는 뜻이다.
OR 연산자를 이용해서 Union type을 만들어 사용할 수 있다.
object에 지정한 타입의 경우 합치기도 가능하다.
&
기호를 쓴다면 object 안의 두 개의 속성을 합칠 수 있다.
위 코드에서 "NewType"은 { x: number, y: number }
라고 정의된다.
이것을 "extend한다"고 한다.
Type alias & Type alias는 물론 Type alias & { name: 타입 } 도 가능하다.
이렇게 하면 에러가 난다.
나중에 type 키워드랑 유사한 interface 키워드에선 재정의가 가능하다~