TypeScript란 Microsoft에서 개발 및 유지 관리 하는 오픈소스 프로그래밍 언어이다.
TypeScript는 ES5의 Superset이므로 기존의 자바스크립트(ES5) 문법을 그대로 사용할 수 있다. 쉽게 말해 JavaScript에 타입
을 부여한 언어이다.
동적 타이핑 (Dynamic Typing)
런타임
시 에러를 발생시킨다.정적 타이핑 (Static Typing)
컴파일
시 에러를 발생시킨다.크게 에러의 사전 방지 및 코드 가이드 및 자동완성을 통한 개발 생산성 향상을 위해 사용한다.
// js
function sum(a, b) {
return a + b;
}
// ts
function sum(a: number, b:number) {
return a + b;
}
sum(10, 20); // ex1
sum('10', '20'); // ex2
sum
함수를 이용하여 ex1과 같이 숫자 10과 20을 더하게 되면 js, ts 모두 20을 얻을 수 있다.
ex2와 같이 숫자 대신 문자열을 더하게 될 경우 js는 1020
이라는 결과를 반환한다. 그러나, ts의 경우 컴파일 단계에서 오류를 발생시켜 의도하지 않은 코드의 동작을 예방할 수 있다.
TypeScript를 사용하게되면 Visual Studio Code
와 같은 개발 툴의 기능을 최대로 활용할 수 있다.
JavaScript로 코드를 작성하게 되면 작성 시점에 변수의 타입을 모르기 때문에 API를 사용할 수 없다. 그러나 TypeScript로 코드를 작성하게 되면 타입이 지정되어 있기 때문에 해당 타입에 대한 API를 미리 보기로 볼 수 있고 빠르고 정확하게 작성할 수 있다.
JavaScript에서 추가된 데이터 타입이 있다.
let isTrue: boolean = false;
let num: number = 6;
let name: string = "typescript";
let arr: number[] = [1, 2, 3]; // []
let arr: Array<number> = [1, 2, 3]; // 제네릭 배열 타입
요소의 타입과 개수가 고정된 배열을 표현 가능하다.
let arr: [string, number];
arr = ["hello", 1];
console.log(arr[0].substring(1)); // 정해진 인덱스에 위치한 요소에 접근 가능
특정 값이 어떤 Color
enum멤버와 매칭되는지를 알고 싶을 때, 이 값을 이용하면 일치하는 enum 멤버의 이름을 알아낼 수 있다.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
알지 못하는 타입을 표현해야 할 경우 타입 검사를 하지 않고, 그 값들이 컴파일 시간에 검사를 통과시킬 때 사용한다.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // success
또한, any 타입은 타입의 일부만 알고 전체는 알지 못할 때 사용한다. 예를 들어, 여러 다른 타입이 섞인 배열을 다룰 수 있다.
let list: any[] = [1, true, "free"];
list[1] = 100;
변수에는 undefined
와 null
만 할당하고, 함수에는 반환 값을 설정할 수 없는 타입이다. 보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰인다.
let unuseful: void = undefined;
function warnUser(): void {
console.log("This is my warning message");
}
// 이 밖에 이 변수들에 할당할 수 있는 값이 없다!
let u: undefined = undefined;
let n: null = null;
기본적으로 null
과 undefined
는 다른 모든 타입의 하위 타입이다.
하지만, --strictNullChecks
를 사용하면, null
과 undefined
는 오직 any
와 각자 자신들 타입에만 할당 가능하다.
함수의 끝에 절대 도달하지 않는다는 의미를 지닌 타입이다.
// 이 함수는 절대 함수의 끝까지 실행되지 않는다는 의미
function neverEnd(): never {
while (true) {
}
}
object
는 원시 타입(Primitive Type)이 아닌 타입을 나타낸다.
값이 변하지 않는 변수는 const
를, 값이 변하는 변수는 let
을 사용하여 선언한다. var
는 절대로 사용하지 않도록 한다.
- let: 중복 선언 불가능 > 블럭 내부의 변수는 외부에서 사용 불가능
- var: 중복 선언 가능 > 블럭 내부의 변수를 외부에서 사용 가능
var foo = 123;
console.log(foo); //123
{
var foo=456; // 중복선언이 가능, 위에 선언된 애를 블럭내에서도 참조가 되버림
}
console.log(foo); //456 , 블럭밖에서도 참조가 됩니다.
let foo2_ = 789;
console.log(foo2_); //789
{
let foo2_:number = 456;
// 중복선언이 불가능. 같은 변수를 두번 선언 할 수 없음.
// /위에걸 쓰는게 아니고 블럭내의 변수하나를 새로 만드는것
let bar:number = 456;
console.log(foo2_);
console.log(bar); //456
}
foo2_ = 567;
console.log(foo2_); //789
$ npm install -g typescript
let helloWorld = "Hello World!!";
const user = {
name: "TypeScript",
id: 0,
};
$ tsc test.ts
var helloWorld = "Hello World!!";
var user = {
name: "TypeScript",
id: 0,
};
tsconfig.json
에서 컴파일 옵션 수정이 가능하다.