Any vs Object vs Unknown
- typescript에서 모든 타입은 any type의 서브 타입들이다. 그래서 어떠한 제약도 없는 모든 타입을 받아서 사용할 수 있다.
- object non privitive type으로 undefined, string, boolean, symbol같은 primitive type을 허용하지 않는다. 대신 null은 허용된다. (null은 태생이 object)
- unknown 타입은 any 타입처럼 어떤값도 넣을 수 있다. 하지만 ts compiler는 unknown 타입에 대한 어떤 오퍼레이션도 허용하지 않는다. 게다가 unknown 타입은 오직 any 타입만 할당 할 수있다.
자료형 캐스팅 방법
- let strLength: number = (<string>someValue).length;
- let strLength: number = (someValue as string).length;
readonly vs const
- 두 가지 모두 기존 데이터를 수정할 수 없게 하는 예약어이지만 readonly는 클래스 변수에, const는 메소드 내 지역변수에서 사용된다.
symbol
- number, string의 non primitive 형태의 데이터를 primitive하게 해주는 역할
- 자바에서 new String(). new Integer()와 같은 것으로 두 개의 비교는 == 로 할 수없다. 왜냐하면 애초에 같은 값이여도 서로 다른 주소를 가리키는 객체가 되기 때문. 유니크한 형태의 primitive를 만들어 주는 것
declare
- 타입스크립트 컴파일러에게 해당 변수가 어딘가에 선언되어 있따고 알려주는 행위로써 전역변수를 사용할 떄도 사용되고 .d.ts 파일을 만들때 사용
https://stackoverflow.com/questions/35019987/what-does-declare-do-in-export-declare-class-actions
import vs require
- 둘다 같은 기능이나 require는 레거시 import 사용 권장
https://www.typescriptlang.org/docs/home.html