타입 스크립트는 일반 변수, 매개 변수(Parameter), 객체 속성(Property) 등에 :TYPE 과 같은 형태로 타입을 지정할 수 있습니다.
function someFunc(a: TYPE_A, b: TYPE_B) : TYPE_RETURN {
return a+b;
}
let some: TYPE_SOME = someFunc(1,2);
add함수와 매개변수 a, b, c 를 number타입으로 지정함
function add(a: number, b:number){
return a+b;
}
const sum: number = add(1,2);
console.log(sum); // 3
단순한 참(true) / 거짓(false) 값을 나타냅니다.
let isBoolean: boolean;
let isDone: boolean = false;
모든 부동 소수점 값을 사용할 수 있다.
let num: number;
let integer: number = 6;
let float: number = 3.14;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let infinity: number = Infinity;
let nan: number = NaN;
문자열을 나타낸다. 작은 따옴표 (''), 큰 따옴표(" ") 지원한다.
let str: string;
let red: string = 'Red';
let green: string = "Green";
let myColor: string = 'My color is ${red}.';
let yourColor: string = 'Your color is' + green;
순차적으로 값을 가지는 일반 배열을 나타낸다. 두 가지 방법으로 타입 선언 가능
// 문자열만 가지는 배열
let fruits: string[] = ['Apple','Banana','Mango'];
// Or
let fruits: Array<string> = ['Apple','Banana','Mango'];
// 숫자만 가지는 배열
let oneToSeven: number[] = [1,2,3,4,5,6,7];
// Or
let oneToSeven: Array<number> = [1,2,3,4,5,6,7];
문자열과 숫자를 동시에 가지는 배열도 선언할 수 있다.
let array: (string|number)[] = ['Apple', 1, 2, 'Banana', 'Mango',3];
//Or
let array: Array<string | number> = ['Apple',1,2,'Banana','Mango',3];
배열이 가지는 항목의 값을 단언하 ㄹ수 없다면 any를 사용할 수 있다.
let someArr: any[] = [0, 1, {}, [], 'str', false];
인터페이스(Interface)나 커스텀 타입(Type)을 사용할 수도 있다.
interface IUser {
name: string,
age: number,
isValid: boolean
}
let userArr: IUser[] = [
{}
name: 'Neo',
age: 85,
isValid: true
},
{
name: 'Lewis',
age: 85
isValid: false
},
{
name: 'Evan',
age: 36,
isValid: true
}
];
읽기 전용 배열을 생성할 수도 있다. readonly 키워드나 ReadonlyArray 타입을 사용하면 된다.
//push 하거나 값을 재할당 할 수 없다.
let arrA: readonly number[] = [1,2,3,4];
let arrB: ReadonlyArray<number> = [0,9,8,7];
tuple 타입은 배열과 매우 유사하다. 차이점이라면 정해진 타입의 고정된 길이 배열을 표현한다.
// Variables
let userId: number = 1234;
let userName: string = 'HEROPY';
let isValid: boolean = true;
//Tuple
let user: [number, string, boolean] = [1234,'HEROPY', true];
Tuple은 정해진 타입의 고정된 길이 배열을 표현하지만, 이는 할당(Assign)에 국한된다. .push()나 .splice()등을 통해 값을 넣는 행위는 막을 수 없다.
let tuple: [string, number];
tuple = ['a',1];
tuple = ['b',2];
tuple.push(3);
배열에서 사용한 것과 같이 readonly 키워드를 사용해 읽기 전용 튜플을 생성할 수도 있다.
Enum은 숫자 혹은 문자열 값 집합에 이름(Member)을 부여할 수 있는 타입으로, 값의 종류가 일정한 범위로 정해져 있는 경우 유용하다. 기본적으로 0부터 시작하며 값은 1씩 증가한다.
Any는 모든 타입을 의미한다. 따라서 일반적인 자바스크립트 변수와 동일하게 어떤 타입의 값도 할당할 수 있다. 외부 자원을 활용해 개발할 때 불가피하게 타입을 단언하 ㄹ수 없는 경우, 유용할 수 잇다.
let any: any = 123;
any = 'Hello world';
any = {};
any = null;
다양한 값을 포함하는 배열을 나타낼 때 사용할 수도 있습니다.
const list: any[] = [1, true, 'Anything!'];
컴파일 옵션 "noImplicitAny": true 을 통해 any 사용 시 에러를 발생시킬 수도 있다.
Any와 같이 최상ㅇ위 타입인 Unknown은 알 수 없는 타입을 의미한다. Any와 같이 Unknown에는 어떤 타입의 값도 할당할 수 있지만, Unknown을 다른 타입에는 할당할 수 없다.
일반적인 경우 Unknown은 타입 단언(Assertions)이나 타입 가드(Guards)를 필요로 한다.
let a : any = 123;
let u : unknown = 123;
let v1: boolean = a; // 모든 타입(any)은 어디든 할당할 수 있다.
let v2: number = u; // 알 수 없는 타입 (unknown)은 모든 타입 (any)을 제외한 다른 타입에 할당할 수 없다.
let v3: any = u;
let v4: number = u as number; // 타입을 단언하면 할당할 수 있다.
다양한 타입을 반환할 수 있는 API에서 유용할 수 있다.
Unknown 보단 좀 더 명확한 타입을 사용하는 것이 좋다.
type Result = {
success: true,
value: unknown
} | {
success: false,
error: Error
}
export default function getItems(user: IUser): Result {
//some logic..
if (id.isValid){
return {
success: true,
value: ['Apple','Banana']
};
} else {
return {
success : false,
error: new Error('Invalid user.')
}
}
}
기본적으로 typeof 연산자가 object로 변환하는 모든 타입을 나타낸다.
여러 타입의 상위타입이다.
let obj: object = {};
let arr: object = [];
let func: object = function() {};
let nullValue: object = null;
let date: object = new Date();
보다 정확하게 타입 지정을 하기 위해 다음과 같이 객체 속성(Properties)들에 대한 타입을 개별적으로 지정할 수 있다.
let userA: {name: string, age: number} = {
name: 'HEROPY',
age:123
};
let userB: {name: string, age: number} = {
name: 'HEROPY',
age: false,
email: 'dus7653@gmail.com' //Error
}
반복적인 사용을 원한다면, interfase나 type을 사용하는 것이 좋다.
interface IUser{
name: string,
age: number
}
let userA : IUser = {
name: 'HEROPY',
age: 123
};
let userB : IUser = {
name: 'HEROPY',
age: false, //error
email: 'dke@gmail.com' //Error
}
Null과 Undefined는 모든 타입의 하위 타입으로, 다음과 같이 각 타입에 할당할 수 있다. 서로 다른 타입에도 할당 가능하다.
let num: number = undefined;
let str: string = null;
let obj: {a:1, b:false} = undefined;
let arr: any[] = null;
let und: undefined = null;
let nul: null = undefined;
let voi: void = null;
void는 일반적으로 값을 반환하지 않는 함수에서 사용한다. : void 위치는 함수가 반환 타입을 명시하는 곳이다.
화살표 함수를 이용해 타입을 지정할 수 있다. 인수의 타입과 반환 값의 타입을 입력한다.
let myFunc: (arg1: number, arg2: number) => number;
myFunc = function (x,y){
return x+y;
};
//인수가 없고, 반환도 없는 경우
let yourFunc: () => void;
yourFunc = function() {
console.log('Hello world~');
};