자바스크립트에도
String
,Number
,Object
등의 데이터 타입이 존재하지만, 자바스크립트는 전체 코드에 일관되게 할당되었는지 미리 확인해주지 않는다. 아래 코드에서 확인할 수 있듯이 자바스크립트는 숫자가 아닌 값이 들어가는지 확인하지 않는다.// javascript const add = (a, b) => a + b; console.log(add(1, 2)); // 3 console.log(add('str', 2)); // str2
// typescript const add = (a:number, b:number):number => a+b; console.log(add(1, 2)); // 3 console.log(add('str', 2)); // Error
타입스크립트는 다음 특징을 갖는다.
컴파일 언어
자바스크립트 슈퍼셋 : 타입스크립트는 자바스크립트의 기본 문법에 타입스크립트 문법을 추가한 언어다.
객체지향 지원 : 타입스크립트는 ES6에서 새롭게 사용된 문법을 포함하고, 객체지향 프로그래밍 패턴을 제공한다.
이제 타입스크립트를 사용하는 이유에 대해 알아보자.
타입스크립트는 다양한 데이터 타입을 제공한다.
Boolean
, Number
, String
, Object
, Array
, Tuple
, Enum
, Any
, Void
, Null
, Undefined
, Never
never
는 특정 값이 절대 발생할 수 없음을 의미하고, 주로 함수의 리턴 타입으로 사용된다. 함수의 리턴 타입으로never
가 사용될 경우, 항상 오류를 출력하거나 리턴값을 절대로 반환하지 않음을 의미한다. (=무한루프)
let str:string = 'hi';
let num:number = 100;
/*
num = '20';
main.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.
*/
let arr:Array = [1, 2, 3];
let arr2:number[] = [1, 2, 3];
let arr3:Array<number> = [1, 2, 3];
let obj:object = {};
let obj2:{name:string, age:number} = {
name: 'John',
age: 30
};
const add = (a:number, b:number):number => a+b;
// <parameter>? : 옵션
const option = (a:string, b?:string, c?:string) => { console.log(a); };
인터페이스 : (기본 틀) 타입을 정의한 규칙
interface User{
name: string;
age: number;
}
var user:User = {
name: 'John',
age: 30
};
제네릭 : 데이터 타입을 일반화하는 것
제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.
// CommonJS
function getText<T> (text:T):T {
return text;
}
// ES6 ver
const getText = <T,>(text:T) => text;
console.log(getText<string>('hi'));
console.log(getText<number>(10));
console.log(getText<boolean>(true));
💥 Tuple 만들기
튜플은 배열과 유사하나 길이가 고정되고, 각 요소의 타입이 지정되어 있다는 점에서 차이가 있다.
let tuple:[string, number] = ['hi', 10];
💥 Enum
enum
은 Java와 같은 다른 언어에서 흔하게 쓰이는 타입으로, 정수형 상수의 집합이다. enum
은 상수에 이름을 붙여 코드의 가독성을 높여준다.
enum Avengers { IronMan, CaptainAmerica, Thor};
let hero:Avengers = Avengers.IronMan; // == Avengers[0]
console.log(hero); // 0
enum
의 첫번째 상수값은 0부터 시작하며 사용자 편의로 변경하여 사용할 수도 있다.
enum Avengers { IronMan = 3, CaptainAmerica, Thor};
💥 any
any
는 단어 의미 그대로 모든 타입에 대해 허용한다. 기존에 자바스크립트로 구현되어 있는 코드에 타입스크립트를 점진적으로 적용할 때 활용하면 좋다.
let allType:any = 'hi';
allType = 10;