본문 바로가기

TypeScript

TypeScript

TypeScript는 정적 타입을 지원한다. 

첫 번째 예제처럼 써도 자바스크립트에서 오류가 나지않고 실행되지만

코드상으로 어떤 타입의 인수를 전달하는지, 어떤 타입의 반환값을 리턴하는지 명확하지않다.

따라서 타입스크립트로 작성하면 타입을 명확하게 하여 오류를 포착할 수 있는 장점이 있다.

function sum(a, b) {
  return a + b;
}

sum('x', 'y'); // 'xy'

 

function sum(a: number, b: number) {
  return a + b;
}

sum('x', 'y');
// error TS2345: Argument of type '"x"' is not assignable to parameter of type 'number'.

 

 

tsc --init

tsc --watch   :   파일 내용이 변경되었을 때 이를 감지하여 자동으로 js 파일로 변경한다.

 

 

타입 종류

Type JS TS Description
boolean true와 false
null 값이 없다는 것을 명시
undefined 값을 할당하지 않은 변수의 초기값
number 숫자(정수와 실수, Infinity, NaN)
string 문자열
symbol 고유하고 수정 불가능한 데이터 타입이며 주로 객체 프로퍼티들의 식별자로 사용(ES6에서 추가)
object 객체형(참조형)
array   배열
tuple   고정된 요소수 만큼의 타입을 미리 선언후 배열을 표현
enum   열거형. 숫자값 집합에 이름을 지정한 것이다.
any   타입 추론(type inference)할 수 없거나 타입 체크가 필요없는 변수에 사용. var 키워드로 선언한 변수와 같이 어떤 타입의 값이라도 할당 가능.
void   일반적으로 함수에서 반환값이 없을 경우 사용한다.
never   결코 발생하지 않는 값

 

 

// boolean
let isDone: boolean = false;

// null
let n: null = null;

// undefined
let u: undefined = undefined;

// number
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

// string
let color: string = "blue";
color = 'red';
let myName: string = `Lee`; // ES6 템플릿 문자열
let greeting: string = `Hello, my name is ${ myName }.`; // ES6 템플릿 대입문

// object
const obj: object = {};

// array
let list1: any[] = [1, 'two', true];
let list2: number[] = [1, 2, 3];
let list3: Array<number> = [1, 2, 3]; // 제네릭 배열 타입

// tuple : 고정된 요소수 만큼의 타입을 미리 선언후 배열을 표현
let tuple: [string, number];
tuple = ['hello', 10]; // OK
tuple = [10, 'hello']; // Error
tuple = ['hello', 10, 'world', 100]; // Error
tuple.push(true); // Error

// enum : 열거형은 숫자값 집합에 이름을 지정한 것이다.
enum Color1 {Red, Green, Blue};
let c1: Color1 = Color1.Green;

console.log(c1); // 1

enum Color2 {Red = 1, Green, Blue};
let c2: Color2 = Color2.Green;

console.log(c2); // 2

enum Color3 {Red = 1, Green = 2, Blue = 4};
let c3: Color3 = Color3.Blue;

console.log(c3); // 4

/*
any: 타입 추론(type inference)할 수 없거나 타입 체크가 필요 없는 변수에 사용한다.
var 키워드로 선언한 변수와 같이 어떤 타입의 값이라도 할당할 수 있다.
*/
let notSure: any = 4;
notSure = 'maybe a string instead';
notSure = false; // okay, definitely a boolean

// void : 일반적으로 함수에서 반환값이 없을 경우 사용한다.
function warnUser(): void {
  console.log("This is my warning message");
}

// never : 결코 발생하지 않는 값
function infiniteLoop(): never {
  while (true) {}
}

function error(message: string): never {
  throw new Error(message);
}

// Date 타입
const today: Date = new Date();

// HTMLElement 타입
const elem: HTMLElement = document.getElementById('myId');

class Person { }
// Person 타입
const person: Person = new Person();
반응형