Javascript
의 강력한 장점이자 단점은 동적
이라는 것이다.
추적이 안되는 객체들이 너무나도 많기에 속성의 변경이 너무나도 쉬우면서, 반대로 변경이 너무나도 쉬워서 잘못되었다는 것을 실행 중에 알게 된다.
TypseScript
가 해결책이다. TypeScript는 기본적으로 변수에 타입을 지정해주면서, 코드를 추적해준다.
let a:number; //빨간 줄
a=1;
a=true //빨간 줄
위와 같이 타입을 고정시켜주는 역할을 한다.
let isDone:boolean=false;
참/거짓 값
let decimal:number=6;
let color:string="blue";
color='red';
배열 타입은 두 가지 방법으로 쓸 수 있다. 첫 번째 방법은 배열 요소들을 나타내는 타입 뒤에 []
를 쓰는 것이다.
let list:number[]=[1,2,3];
두번째 방법은 제네릭 배열타입을 쓰는 것이다 Array<elemType>:
let list: Array<number>=[1,2,3];
튜플 타입을 사용하면 요소의 타입과 개수가 고정된 배열을 표현할 수 있다. 단 요소들의 타입이 모두 같을 필요는 없다. 예를 들면 number,string이 쌍으로 있는 값을 나타내고 싶을 수 있다.
//튜플 타입으로 선언
let x:[string,number];
//초기화
x=["hello",10];//성공
//잘못된 초기화
x=[10,"hello"];//오류
enum Color{Red,Green,Blue}
let c:Color=Color.Green;
기본적으로 enum은 0부터 시작해서 멤버들의 번호를 매긴다.멤버 중 하나의 값을 수동으로 설정하여 번호를 바꿀 수 있다. 예를 들어, 위 예제를 0대신 1부터 시작해 번호를 매기도록 바꿀 수 있다.
enum Color {Red=1,Green,Blue}
let c:Color=Color.Green;
또는 모든 값을 수동으로 설정할 수 있다.
enum Color {Red=1, Green=2, Blue=4}
let c:Color=Color.Green;
enum의 유용한 기능 중 하나는 매겨진 값을 사용해 enum멤버의 이름을 알아낼 수 있다는 것이다.
enum Color{Red=1,Green,Blue}
let colorName:string=Color[2];
console.log(colorName);//값이 2인 'Green'이 출력된다.
애플리케이션을 만들 때, 알지 못하는 타입을 표현해야 할 수도 있다.
let notSure:any=4;
notSure="maybe a string instead";
notSure=false'
any타입은 기존에 Javascript로 작업할 수 있는 강력한 방법으로 컴파일 중에 점진적으로 타입 검사를 하거나 하지 않을 수 있다.
또한, any 타입은 타입의 일부만 알고 전체는 알지 못할 때 유용
하다. 예를 들어, 여러 다른 타입이 섞인 배열을 다룰 수 있다.
let list: any[] =[1,true,"free"];
list[1]=100;
void는 어떤 타입도 존재할 수 없음을 나타내기에, any의 반대타입같다. void는 보통 함수에서 반환값이 없을 때 반환타입을 표현하기 위해 쓰인다.
function warnUser(): void{
console.log("This is my warning message");
}
void를 타입 변수를 선언하는 것은 유용하지 않은데. 왜냐하면 그 변수에는 null(--strictNullChecks을 사용하지 않을 때만 해당),undefined만 할당할 수 있기 때문이다.
타입스크립트는 undefined, null 둘 다 각각 자신의 타입 이름으로 undefined,null로 사용한다. void처럼 그 자체로 유용한 경우는 거의 없다.
let u:undefined=undefined;
let n:null=null;
기본적으로 null과 undefined는 다른 모든 타입의 하위 타입. 이건, null과 undefined를 number같은 타입에 할당할 수 있다는 것을 의미한다.
하지만, --strictNullChecks를 사용하면, null과 undefined는 오직 any와 각자 자신들 타입에만 할당 가능하다. 이는 많은 일반적인 에러를 방지하는데 도움을 준다.
never타입은 절대 발생할 수 없는 타입을 나타낸다. 예를 들어, never는 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않은 반환타입으로 쓰인다.
//never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message:string):never{
throw new Error(message);
}