출처: 엘리스 자료, https://typescript-kr.github.io/
-> 코드를 실행해보기 전까지 데이터 타입의 오류를 알아차릴 수 없음
//코드 직관성 + 동적 타입의 문제
function foo(person) {
// person이 객체인지 string타입인지 판단하기 어려움
// 만약 객체라면 안에 있는 property가 무엇인지도 현재 함수 코드만 봐서는 알 수 없음
}
정적 타입 시스템의 장점
boolean
let idsDone: boolean = false;
number
2, 8, 10, 16진수 지원
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
string
let color: string = "blue";
color = "red";
array
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
튜플
타입과 개수가 고정된 배열
let x: [string, number];
x= ['hello', 10]; //성공
x= [10, 'hello']; //에러
enum
enum Color {Red, Gree, Blue}
let c: Color = Color.Green;
index가 0부터 시작한다. 수동으로 번호를 설정할수도 있다.
enum Color {Red=1, Green=2, Blue=4}
let colorName: string = Color[2]; // => Green
Any
모든 타입 가능
let notSure: any = 4;
notSure = "aaa"; // 성공
notSure = false; // 성공
여러 다른 타입이 섞인 배열을 다룰 수 있다.
let list: any[] = [1, true, "free"];
list[1] = 100;
void
return값 없을때 사용
function car(): void {
console.log("ho");
}
변수에 void를 선언할경우 null, undefined만 할당할 수 있다.
null, undefined
각각 자기자신만 할당 가능
let u: undefined = undefined;
let n: null = null;
never
함수식에서 항상 에러를 발생시키거나 절대 반환하지 않는 반환 타입으로 사용
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message:string): never {
throw new Error(message);
}
function infi(): never {
while (true) {}
}
// 반환 타입이 never로 추론된다.
function fail() {
return error("fail");
}
function printLabel(obj: {label:string}) {
console.log(obj.label);
}
let obj = {size: 10, label: "size"};
printLabel(obj);
printLabel 함수는 string타입 label을 갖는 객체를 하나의 매개변수로 가진다.
최소한 필요한 프로퍼티가 있는지, 타입이 맞는지만 검사한다.
interface labelValue {
label: string;
}
function printLabel(obj: labelValue) {
console.log(obj.label);
}
let obj = {size: 10, label: "Size"};
printLabel(obj);