01. 타입스크립트를 쓰는 이유를 알아보자!

Javascipt (동적언어) : 런타임에 타입 결정 / 오류 발견 Java, TypeScript (정적언어) : 컴파일 타임에 타입 결정 / 오류 발견


function add(num1, num2){
console.log(num1 + num2);

}

add(); //NaN
add(1); //NaN
add(2,3); // 5
add(3,4,5); // 7
add('hello','world'); // 'hello world'


자바스크립트로 이 코드를 작성할 경우 이런식으로 작성되지만 타입스크립트로 이 코드를 돌리면 2, 3 과 hello world를 제외한 함수호출 라인에 오류가 뜬다.


function add(num1 : number, num2 : number){
console.log(num1 + num2);

}

// add();
// add(1);
add(2,3);
// add(3,4,5);
// add('hello','world');


이처럼 타입을 넘버로 하면 문자열인 마지막 호출문도 오류가 뜬다.


function showItems(arr) {
 arr.forEach((item) => {
   console.log(item);
 });
}

showItems([1, 2, 3]);
showItems(1, 2, 3);

이 코드도 타입스크립트로 바꿔주자


function showItems(arr:number[]) {
 arr.forEach((item) => {
   console.log(item);
 });
}

showItems([1, 2, 3]);
showItems(1, 2, 3); //오류 ! 배열이 아니기 때문.


02. 타입스크립트 기본 타입

number, string


let age:number = 30;
let isAdult:boolean = true;
let a:number[] = [1, 2, 3];
let a2:Array<number> = [1,2,3]

let week1:string[] = [mon, true, wed];
let week2:Array<string> = [mon, true, wed];

Tuple


// 튜플 (Tuple)

let b:[string, number];

b = [z, 1]; 
// b = [1, ‘z’];  오류!

b[0].toLowerCase();
// b[1].toLowerCase(); 오류!


void, necer


// void, never


function sayHello():voide{
 consoe.log(hello);
}

voide는 아무것도 반환하지 않을때 쓸 수 있다.


function showError():never{
 throw new Error();
}

never는 항상 에러를 반환할 때나


function infLoop():never{
 while (true) {
	// do something. . .
	}
}

영원히 끝나지 않을 타입의 함수일때 쓴다.

enum


// enum

enum Os {
 Window,
 Ios,
 Android
}

null, undefined


// null, undefined

let a:null = null;
let b:undefined = undefined;