타입 지정에 따른 개발 편의성과 javascript와의 상호 호환
동적 타입인 javascript가 런타임에 타입이 지정되지만 정적타입인 Typescript는 컴파일시 타입을 체크한다. 이는 예상지 못한 타입의 인수로 인한 오류를 개발자가 미리 체크할 수 있도록 도와준다. 인수가 어떤 타입인지 직관적으로 알아 함수의 코드를 분석할 필요없이 디버깅을 빠르게 수행할 수 있다. 무엇보다 Typescript는 javascript의 낮은 버전으로 컴파일이 되기 때문에 babel을 사용하지 않고도 넓은 호환성을 가진 코드를 가질 수 있다.
Typescript의 이점을 알았으니 기초부터 공부를 시작하자!
매개 변수, 객체 속성부터 함수의 반환값까지. 그 이외의 변수 등등에 타입을 지정.
// 숫자
let num: number = 2.14;
// 문자열
let str: string = 'Hello';
// 불리언
let bool: boolean = true;
// 문자열만 가지는 배열
let animals1: string[] = ['cat', 'dog'];
let animals2: Array<string> = ['cat', 'dog'];
// 특정한 값으로 지정
let unique: 'hi' = 'hi';
// 유니언 타입
let arr1: (string | number)[] = ['cat', 1];
let arr2: Array<string | number> = ['cat', 1];
// 항목의 값을 단언할 수 없는 경우
let some: any[] = [0, 1, 'dog'];
// 읽기 전용
let book1: readonly string[] = ['Little prince', 'Algorithm'];
let boo2: ReadonlyArray<string> = ['Little prince', 'Algorithm'];
push()
, shift()
등에 대한 행위는 막지 못하고 오류 체크 불가.let tuple: [string, boolean];
tuple = ['cat', true];
tuple = ['cat','dog']; // Type 'string' is not assignable to type 'boolean'.
// 튜플 배열
let list = [number, string][];
list = [[1, 'rose'], [2, 'lily']];
// 읽기 전용 튜플
let tuple: readonly [number, string];
tuple = [1, 'cat'];
enum Day {
Sun, // 0
Mon = 22,
Tue, // 23
Wed, // 24
Thu, // 25
Fri, // 26
Sat // 27
}
// 역방향 매핑
console.log(Day[0]) // Sun
let some: any = 123;
some = 'str'
some = false;
some = null;
let some: any = 123;
let something: unknown = 'something';
let newSome: boolean = some;
let newSomething: number = something; // Type 'unknown' is not assignable to type 'number'.
let obj: object = {};
let nullObj: object = null;
// 객체 속성 타입 지정
let animal1: {name: string, age: number} = {
name: 'kitty',
age: 20
}
// interface 사용
interface Animal {
name: string,
age: number
}
let animal2: Animal = {
name: 'Nabi',
age: 12
}
"strickNullChecks" : true
면 다음과 같이 작동false
인 경우 모든 데이터 타입은 null과 undefined 할당 가능.let un: undefined = undefined;
let an: any = undefined;
let vo: void = undefined;
let unk: unknown = undefined;
let nu: null = null;
let nuAn: any = null;
let nuUnk: unknown = null;
let num: number = undefined; // Type 'undefined' is not assignable to type 'number'.
undefined
이다.function addAnimal(animal: string): void {
console.log(`${animal}이 추가되었습니다.`)
}
// 오류 발생
function setError(msg: string): never {
throw new Error(msg)
}
// 무한 루프
funciton loop(): never {
while(1){ loop() }
}
// union
let id: (string | number | null);
id = null;
id = 'hi';
id = 1;
// interaction
interface Hair {
style: string
}
interface Color {
color: string
}
const hairStyle: Hair & Color = {
style: 'Long',
color: 'blueBlack',
cut: '2cm' // Error
}
function addAnimal(name: string, age: number): void {
console.log(`${name}은 ${age}살 입니다.`
}
참고자료
https://yamoo9.gitbook.io/typescript/
https://chaeyoung2.tistory.com/62