Skip to content

Commit 8d3df4c

Browse files
committed
🚩: Record를 사용하는 방법과 응용 방법
1 parent 6db5beb commit 8d3df4c

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

src/index.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
1-
// Readonly<T> : ReadOnly는 읽기 전용으로 된다. 이후 값을 변경하려고 하면 error가 발생한다.
1+
// Record<K,T> : Record는 다른 유틸리티 타입과 단리 key와 type을 가지고 있다.
2+
//User와 같이 key값을 활용해서 유니온 타입으로 사용할 수 있지만 GradeRecord, ScoreRecord와 같이 key와 type을 따로 지정해서 사용할 수도 있다.
3+
import {
4+
ScoreFor, GradeRecord,
5+
ScoreRecord,
6+
User
7+
} from "./utils/data.interface"
28

3-
import { User } from "./utils/data.interface"
9+
const score: Record<GradeRecord, ScoreRecord> = {
10+
1: 'A',
11+
2: 'B',
12+
3: 'C',
13+
4: 'D',
14+
};
415

5-
let admin: Readonly<User> = {
6-
id: 1,
7-
name: "Bob",
8-
age: 30,
9-
}
16+
//응용
1017

11-
// admin.id = 2; // error-> readonly로 인한 error 발생
18+
function isValid(user: User) {
19+
const result: Record<keyof User, boolean> = {
20+
id: user.id > 0,
21+
name: user.name !== "",
22+
age: user.age > 0,
23+
};
24+
return result;
25+
}

src/utils/data.interface.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,15 @@ export interface InterToy {
7979
export interface User {
8080
id: number;
8181
name: string;
82-
age?: number;
83-
}
82+
age: number;
83+
}
84+
85+
export interface ScoreFor {
86+
'1': 'A' | 'B' | 'C' | 'D';
87+
'2': 'A' | 'B' | 'C' | 'D';
88+
'3': 'A' | 'B' | 'C' | 'D';
89+
'4': 'A' | 'B' | 'C' | 'D';
90+
}
91+
92+
export type GradeRecord = '1' | '2' | '3' | '4';
93+
export type ScoreRecord = 'A' | 'B' | 'C' | 'D';

0 commit comments

Comments
 (0)