TypeScript란
안전하고 예측 가능한 코드 구현에 초점을 맞춘 JavaScript 상위 집합 언어
가장 큰 특징은 JavaScript에 Type System을 적용한 것
TypeScript 코드는 TypeScript 컴파일러(tsc)를 통해 JavaScript로 변환되고 실행
TypeSystem이외에도 TypeScript는 Decorators와 같은 다양한 기능 제공
예시 코드
// JavaScript
function add(n1, n2) {
return n1 + n2;
}
console.log(add('1', '2'));
// return 12(아스키 코드 연산)
// TypeScript
function add(n1: number, n2: number): number {
return n1 + n2;
}
console.log(add('1', '2'));
// compile error 발생(Number타입 파라미터로 String 타입 전달)
TypeScript 특징
가장 큰 특징은 JavaScript의 타입 체계에 **정적 타입(static typed)**를 적용
JavaScript는 동적 타입 체계(dynamic typed) 언어로 변수에 타입을 지정하지 않음
동적 타입 체계가 갖는 장점도 있지만 변수를 사용할 때 문제가 발생할 수 있음
JavaScript 타입 종류
TypeScript의 사용
변수의 정의와 함께 대입할 값의 타입을 함께 지정
만일 다른 타입의 변수를 대입하는 경우 컴파일 에러 발생
변수와 마찬가지로 함수의 매개변수, 반환 값의 정의에도 동일한 방식으로 적용 가능
예시 코드
// Type Annotation 사용
let year: number = 2023;
// Parameter Annotation, Result Type Annotation
function sum(n1: number, n2: number): number {
return n1 + n2;
}
Type Inference(타입 추론)
정적으로 타입을 명시하지 않고 대입하는 값을 통해 타입을 유추해 결정하는 것
기본적으로 변수의 선언과 함께 값을 대입하는 경우 해당 변수는 대입되는 값의 타입만 가질 수 있음
변수를 선언하고 다른 코드 라인에서 초기화를 하는 경우 해당 변수는 any 타입의 변수가 됨
예시 코드
// 같은 라인에서 초기화하는 경우
let name = 'Kim'; // String type
let age = 20; // number type
// 다른 라인에서 초기화하는 경우
let name;
name = 'Kim;
let age;
age = 20;
// name, age 변수는 모두 any타입으로 추론됨