enum 타입
const ADMIN = 0;
const READ_ONLY = 1;
const AUTHOR = 2;
// JavaScript에선 이런식으로 role을 작성한다.
// 상수를 따로 관리해줘야 하는 불편함
const person = {
name: 'yu',
age: 26,
hobbies: ['game', 'sports'],
role: ADMIN
}
enum 타입을 이용해서 작성하면
enum Role { ADMIN, READ_ONLY, AUTHOR }
// ADMIN = 1, READ_ONLY = 2, AUTHOR = 3
// enum Role { ADMIN = 5, READ_ONLY = 10 }
const person = {
name: 'yu',
age: 26,
hobbies: ['game', 'sports'],
role: Role.ADMIN
}
any type
any 타입은 타입스크립트가 주는 이점을 모두 상쇄시킨다.
자바스크립트와 다를것이 없다.
무슨 값을 받을지 모르거나, 런타임에 체크해야하는 경우(범위를 좁혀준다)를 제외하고는 any type은 쓰지 않는 게 좋다.
union type
유연하게 작성할 수 있다.
let value: number | string = 10;
커스텀 타입 작성
type Combinable = number | string;
type ConversionDescriptor = 'as-number' | 'as-text';
function combine(
input1: Combinable,
input2: Combinable,
resultConversion: ConversionDescriptor
) {
let result;
if (
(typeof input1 === 'number' && typeof input2 === 'number') ||
resultConversion === 'as-number'
) {
result = +input1 + +input2;
} else {
result = input1.toString() + input2.toString();
}
if (resultConversion === 'as-number') {
return +result;
} else {
return result.toString();
}
type User = {
name: string;
age: number;
};
const u1: User = {
name: 'Yu',
age: 26,
};
function greet(user: User) {
console.log(user.age);
}
function isOlder2(user: User, checkAge: number) {
return checkAge > user.age;
}
함수 타입
function add(n1: number, n2: number) {
return n1 + n2;
}
function printResult(num: number): void {
console.log('Result: ' + num);
}
// cb 함수의 리턴타입 void의 의미는 return 타입으로 아무 작업도 수행하지 않을 것 이라는 의미
// 콜백 함수가 리턴값이 있어도 오류가 나지는 않는다.
function addAndHandle(n1: number, n2: number, cb: (num:number) => void){
const result = n1 + n2;
cb(result);
}
addAndHandle(10, 20, (response) => {
console.log(response);
return true;
})
any와 unknown
let userInput: unknown;
let userName: string;
userInput = 5;
userInput = 'Yu';
// userName = userInput; unknown은 string 타입에 할당할 수 없다.
// unknown은 타입을 미리 알 수 없다.
if (typeof userInput === 'string') {
userName = userInput;
}
'개발 > TypeScript' 카테고리의 다른 글
[TypeScript] interface vs type alias에 대한 개인적인 생각 (0) | 2023.11.14 |
---|---|
[TypeScript] tsconfig.json 이해하기 (0) | 2023.08.26 |
[TypeScript] 매일매일 #4 (0) | 2022.03.18 |
[TypeScript] 매일매일 #3 (0) | 2022.03.17 |
[TypeScript] 매일매일 #1 (0) | 2022.03.16 |