참치코더의 꿈 메모장

TypeScript / 타입 별칭, 인덱스 시그니처, enum, any, unknown, void, never 기본정리 본문

TypeScript

TypeScript / 타입 별칭, 인덱스 시그니처, enum, any, unknown, void, never 기본정리

참치깡 2025. 11. 15. 18:29
728x90

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// 타입 별칭
// 일일이 유저별로 type을 지정하면 몇 백개씩 지정해야 하므로 
// type을 사용하면 해당 타입을 따로 지정해서 타입을 사용할 수 있다.
 
type User = {
    id: number,
    name: string,
    nickname: string,
    bio: string;
    location?: string;
};
 
let user1: User = {
    id: 1,
    name"홍길동",
    nickname: "깔깔",
    bio: "안녕하세요",
    location"서울시",
};
 
let user2: User = {
    id: 2,
    name"임꺽정",
    nickname: "껄껄",
    bio: "Hello",
    location"강원도",
};
 
// 인덱스 시그니처
// 인덱스 시그니처를 사용하면 키값과 value값을 따로 지정할 수도 있다. 
 
type CountryCodes = {
    [key: string]: string;
};
 
let countryCodes: CountryCodes = {
    Korea: "ko",
    UnitedState: "us",
    UnitedKingdom: "uk",
};
 
type CountryNumberCodes = {
    [key: string]: number;
};
 
let countryNumberCodes: : CountryNumberCodes = {
    Korea: 410,
    UnitedState: 840,
    UnitedKingdom: 826,
}
 
// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
// 숫자를 지정하지 않으면, 0부터 숫자가 자동 부여되고 숫자를 지정한다면 해당 숫자부터 시작해 번호를 
// 순차적으로 부여한다, 문자를 따로 작성한다면 해당 문자를 기본으로 사용한다.
// 추가적으로 enum타입은 한번 컴파일 되서 자바스크립트로 변환될때 사라지지 않는다.
 
// 숫자형 enum
enum Role {
    ADMIN = 10,
    USER,
    GUEST,
}
 
// 문자형 enum
enum Language {
  korean = "ko",
  english = "en",
}
 
const user1 = {
  name"임꺽정",
  role: Role.ADMIN, //10
  language: Language.korean,
};
 
const user2 = {
  name"홍길동",
  role: Role.USER, //11
  language: Language.english,
};
cs

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// any
// 특정 변수의 타입을 모를때 사용하지만 정말 아무 값이나 입력을 받고, 해당 값을 또 다른 타입에 대입 및 
// 어떤 함수라도(오류가 발생해도) 타이핑 단계에서 오류를 발생하지 않기때문에 거의 사용하지는 않는다.
 
let anyVar: any = 10;
 
// unknown
// any와 마찬가지로 unknown타입으로 지정한다면 거의 모든 값을 받을 수 있으나 typeof 연산자를 사용하여 
// 해당 값이 실제 조건에 부합하면 해당 함수나 값을 대입할 수 있고, 해당 타입 비교를 하지 않는다면
// 오류가 발생하기 때문에 any 타입 보다 unknown타입을 사용하는 것이 더 안전하다.
 
let num: number = 10;
let unKnownVar: unknown;
 
if(typeof unKnownVar === 'number'){
    num = unKnownVar;
}
 
// void
// 아무것도 없음을 의미하는 타입이다.
// 해당 타입을 선언하면, 오직 undefined만 담을 수 있고, 그 이상 아무런 값을 담을 수 없다.
 
function func1(): string {
    return "hello";
}
 
function func2(): void {
    console.log("hello");
}
 
let a: void;
 
// never
// never는 진짜 아무런 값도 담을 수가 없다, undefined도 받지 못한다.
// 해당 타입을 가진 어떤 함수나 변수는 불특정한 오류나 모순때문에 어떠한 값도 반환하지 않는다는것을
// 나타내기 위해 never값을 붙인다.
 
function func3(): never {
  while (true) {}
}
 
function func4(): never {
  throw new Error();
}
 
let a: never;
cs
728x90
Comments