Skip to content

Commit a5c9e2c

Browse files
committed
Merge branch 'main' into zh-Hans
2 parents 9425a4f + 914060e commit a5c9e2c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// 매핑된 타입은 다른 타입을 기반으로 새로운 타입을 만드는 방법입니다.
2+
// 또한 효과적으로 타입을 변환할 수 있습니다.
3+
4+
// 매핑된 타입을 사용하는 일반적인 케이스는
5+
// 기존 타입의 부분적인 하위집합을 다루는 것입니다.
6+
// 예를 들어 다음 API는 Artist를 반환할 수 있습니다:
7+
8+
interface Artist {
9+
id: number;
10+
name: string;
11+
bio: string;
12+
}
13+
14+
// 그러나, Artist의 하위집합만 변경하기 위해
15+
// API를 수정해야 한다면
16+
// 일반적으로 타입을 추가로 만들어야 했습니다.
17+
18+
interface ArtistForEdit {
19+
id: number;
20+
name?: string;
21+
bio?: string;
22+
}
23+
24+
// 위에 Artist 타입과 같지 않을 수도 있습니다.
25+
// 매핑된 타입은 기존 타입에서
26+
// 변화를 만들어 낼 수 있습니다.
27+
28+
type MyPartialType<Type> = {
29+
// 모든 기존 프로퍼티에 대해서
30+
// Type의 타입 내부는 ?: 버전으로 변환합니다
31+
[Property in keyof Type]?: Type[Property];
32+
};
33+
34+
// 이제 수정하는 인터페이스를 추가로 만드는 대신에
35+
// 매핑된 타입을 사용할 수 있습니다:
36+
type MappedArtistForEdit = MyPartialType<Artist>;
37+
38+
// 완벽해 보이지만,
39+
// id 값이 null 이 되는 상황을 방지할 수 없습니다.
40+
// 그래서 교차 타입을 사용하여 빠르게 하나를 개선해 봅시다.
41+
// (예시를 살펴보세요:union-and-intersection-types)
42+
43+
type MyPartialTypeForEdit<Type> = {
44+
[Property in keyof Type]?: Type[Property];
45+
} & { id: number };
46+
47+
// 매핑된 타입의 부분적인 결과를 가지며
48+
// id: number set를 가진 객체와 병합합니다.
49+
// 효과적으로 id를 강제로 타입 안에 넣어줍니다.
50+
51+
type CorrectMappedArtistForEdit = MyPartialTypeForEdit<Artist>;
52+
53+
// 매핑된 타입이 어떻게 동작하는지에 대한
54+
// 매우 간단한 예시입니다만, 기초 대부분을 다룹니다.
55+
// 더 깊게 살펴보고 싶다면, 핸드북을 참고하세요:
56+
//
57+
// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types

0 commit comments

Comments
 (0)