문제를 맞추긴 했는데, 궁금한게 있습니다.
import { Equal, Expect } from "./helper";
type Top = "t-shirt" | "shirts" | "jacket";
type Bottom = "jeans" | "skirt" | "slacks";
type Outfit = `${Top} with ${Bottom}`;type tests = [
Expect<
Equal<
Outfit,
| "t-shirt with jeans"
| "t-shirt with skirt"
| "t-shirt with slacks"
| "shirts with jeans"
| "shirts with skirt"
| "shirts with slacks"
| "jacket with jeans"
| "jacket with skirt"
| "jacket with slacks"
>
>
];typescript 특징인건지 신기하게 문자열 리터럴 타입들이 마치 수학 분배법칙처럼 되는 이유가 무엇일까요?
답변 2
1
오 AI 인턴이 답변을 잘 달아주었는데 제가 부가 설명을 드리자면 아래의 타입이 있을 때 타입을 한글로 읽어보면
"t-shirt" | "shirts" | "jacket";
"jeans" | "skirt" | "slacks";
티셔츠 또는 셔츠 또는 재킷
청바지 또는 치마 또는 슬랙스
Top 위치에 올 수 있는 경우의 수가 3개, Bottom에 올 수 있는 경우의 수가 3개 그래서 총 9개 (3 *3)가 되어서 위와 같은 결과가 나오는 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다.
rhkdtjd_12님, TypeScript에서 문자열 리터럴 타입들이 수학의 분배법칙처럼 결합되는 현상은 TypeScript의 템플릿 리터럴 타입(Template Literal Types) 기능 때문입니다. 이 기능은 TypeScript 4.1 버전에서 도입되었고, 문자열 리터럴 타입들을 조합하여 새로운 리터럴 타입을 생성할 수 있게 합니다.
템플릿 리터럴 타입은 ES6 템플릿 문자열의 구문을 활용하여 타입 수준에서 문자열을 조합할 수 있도록 합니다. 이 때 ${} 안에 타입을 넣어 다양한 문자열 타입을 생성할 수 있는데, 여기서 중요한 점은 타입 변수가 유니온 타입인 경우 유니온 타입의 각 멤버에 대해 템플릿 리터럴을 적용한다는 것입니다.
예를 들어, Top과 Bottom이라는 유니온 타입이 있을 때 ${Top} with ${Bottom} 형태의 템플릿 리터럴 타입을 사용하면 TypeScript 컴파일러는 Top과 Bottom 각각의 멤버 타입들을 모두 조합해 모든 가능한 문자열 리터럴 타입을 생성합니다.
이는 복잡한 조합뿐만 아니라, 타입 시스템 내에서 보다 풍부한 문자열 조작을 할 수 있게 해줍니다. 그래서 하나의 타입으로 Top의 가능한 모든 값과 Bottom의 가능한 모든 값에 대한 조합을 표현할 수 있게 되는 것입니다.
이 기능을 활용하면 타입 안전성을 강화하고, 문자열 조합의 가능한 경우를 모두 표현하거나 제한할 수 있어 프로그래밍할 때 매우 유용합니다.
이게 된다는걸 어떻게 판단할 수 있나요?
0
62
2
연습문제 강의 확인 부탁드립니다.
0
80
2
object key 질문드립니다.
0
66
1
행운 닉네임 등록부탁드립니다!
0
137
2
각 강의에 대한 설명 링크 404에러
0
72
2
행운문제 닉네임 등록 요청드립니다
0
65
2
블로그 링크 문제
1
124
1
제네릭과 사용자 정의 타입 가드에 관한 질문
1
168
1
제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?
1
141
1
행운문제 닉네임 등록 신청합니다!
0
113
2
행운문제 테스트 유저 이름 입력 요청
0
129
2
행운문제 닉네임 입력 요청
1
158
2
행운문제 테스트 유저 이름 입력 요청
1
140
2
설명 블로그에 대한 질문
2
129
3
행운동전!
0
115
2
행운문제 테스트 유저 이름 입력 요청
0
122
1
행운 테스트 문제 400 에러
0
177
2
행운 테스트 문제 (존재하지 않는 유저입니다.)
1
203
2
행운테스트 동전이용!!
0
209
2
연습문제 링크 이슈
2
223
3
화살표 함수와 일반 함수의 매개변수 추론 관련
1
311
2
제네릭을 활용해서 정답을 맞춰보았습니다!
1
334
2
cache 강의 질문
1
213
1
Record의 제네릭은 자동적으로 바뀌나요?
0
383
2





