number : 모든 숫자(integer, float)
const myNumber: number = 1;
string : 모든 문자열
const myString: string = 'Hello, typescript!'
boolean : true/false
const myBoolean: boolean = true;
object : 자바스크립트 객체({ key : value })
const myIntroduction: {
name : string;
age : number;
} = {
name : 'winters',
age : 29
}
Array : 배열(엘리먼트의 종류에 따라 제약이 있을 수 있다.)
// 배열 요소 뒤에 []를 추가
const myStrings: string[] = ['Hello', 'Typescript'];
// 제네릭 배열 타입
const myNumbers: Array<number> = [1, 2, 3];
Tuple : 요소의 타입과 길이가 고정된 배열
const myTuple: [string, number] = ['Hello, typescript!', 123];
Enum : 순서를 가지는 일련의 값
enum isDeveloper {yes, no}
const AreYouDeveloper: isDeveloper = isDeveloper.yes;
Any : 모든 타입(별도의 타입을 지정하지 않으면 any
로 지정)
Void : 존재하지 않는 타입(any
의 반대). 주로 함수에서 반환값이 없는 경우에 반환 타입을 표시하기 위해 사용
void
를 타입 변수로 사용하는 것은 유용하지 않은데, 그 이유는 할당할 수 있는 값이 null
(--strictNullChecks를 사용하지 않을 때) 또는 undefined
뿐이기 때문
const printText: (text: string) => void = (text) => {
console.log(text)
}
Null & Undefined : null
과 undefined
둘 다 자신의 타입을 이름으로 사용하며, 기본적으로 다른 모든 타입의 하위 타입
--strictNullChecks를 사용하면 null
과 undefined
는 각각 자신이나 any
타입에만 할당 가능
Never : 절대 발생할 수 없는 타입으로 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 사용
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없음
function error(message: string): never {
throw new Error(message);
}
// 반환 타입이 never로 추론
function fail() {
return error("Something failed");
}
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없음
function infiniteLoop(): never {
while (true) {
}
}
Javascript - dynamic types(런타임 시에 결정)
const add = function(n1, n2) {
if (typeof n1 !== 'number' || typeof n2 !== 'number') {
throw new Error('Incorrect input!')
}
return n1 + n2;
}
const number1 = 5;
const number2 = 2.8;
const result = add(number1, number2);
console.log(result); // 7.8
Typescript - static types(컴파일 과정에서 확인)
const add = function(n1: number, n2: number) {
return n1 + n2;
}
const number1 = 5;
const number2 = 2.8;
const result = add(number1, number2);
console.log(result); // 7.8
개발자가 컴파일러에게 값의 타입을 실제 타입으로 정의하는 방법으로 값에 정의된 타입보다 실제 타입이 더 구체적일 경우에 사용
// Angle-bracket
let text: any = "Hello, typescript!";
let textLength: number = (<string>text).length;
// as
let text: any = "Hello, typescript!";
let textLength: number = (text as string).length;