정답을 맞추긴 했는데, Equal가 어렵습니다 ㅠㅠ
type GetDetailedWeatherParameters = Parameters<typeof getDetailedWeather>;
type tests = [
Expect<Equal<GetLocationWeatherReturn, string>>,
Expect<
Equal<
GetDetailedWeatherParameters,
[
locationId: string,
details?:
| {
tempUnit?: "C" | "F" | undefined;
includeForecast?: boolean | undefined;
}
| undefined
]
>
>
];
export type Expect<T extends true> = T;
export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
T
>() => T extends Y ? 1 : 2
? true
: false;
Expect는 말그대로 T가 true면 true를 반환함.
이제 문제는 Equal인데, 딱보고 제네릭 타입을 맞춰주면 되겠다 싶어서 똑같이 맞춰줘서 되긴 했지만 너무 어렵습니다.
Equal을 이해 하고 싶습니다
답변 1
0
안녕하세요 rhkdtjd_12 님!
Equal의 용도는 아시다시피 Type space 내에서 타입 변수간 비교를 하는 용도로 사용되고 있습니다.
이게 조건문이 연속적으로 얽혀있다보니까 코드를 이해하기가 조금 어려운데요.
자세히 풀어서 설명을 드리면, 우선 아래와 같이 반복되는 패턴을 Foo 라는 타입으로 만들었습니다.
type Foo<X> = <T>() => T extends X ? 1 : 2
새로 생성한 타입을 치환시켜보면 아래와 같이 깔끔하게 되는데요.
export type Equal<X, Y> = Foo<X> extends Foo<Y>
? true
: false;이러면 좀 더 이해하기가 쉬우실까요? 이걸 말로 풀어보면Foo<X> 가 Foo<Y> 타입으로 할당받을 수 있냐?
Yes: true
No: false
이고, Foo<X> , Foo<Y> 의 타입은 결과적으로 1 또는 2인데요.
Foo<X> 의 결과가 1이고, Foo<Y>의 결과가 2라면 Equal<X,Y>의 결과 타입은 false가 되니까 이걸 Expect 에 넣게되면 타입 에러가 발생할 것입니다.
혹시 더 설명이 필요하면 댓글로 남겨주세요 😃
1
와 설명 진짜 지립니다.
뭔가 약간 유레카 같은 느낌이었습니다.
타입 분석 해볼려고
(<T>() => T extends X ? 1 : 2) extends <
T화살표 함수의 제네릭의 T가 X에 속하면 1 아니면 2인데 거기에 또 extend T? 이런식으로 한줄씩 읽을려고 하니까 뇌하수체 전두엽에서 이상이 발생 했는데,
저런식으로 타입분석 할 때 중복 되는 부분을 다른 type으로 선언해서 빼가지고 보면 가독성이 엄청 좋고 확실히 무슨 말인지 이해가 빠르다는걸 배우게 되었던 답변이었습니다.
제가 이해 한거를 바탕으로 정리하면
(<T>() => T extends X ? 1 : 2) 를 A라고 두면
<T>() => T extends Y ? 1 : 2 를 B라고 두면
export type Equal<X, Y> = A extends B ? true : false;이거군요!!!
i god it
이게 된다는걸 어떻게 판단할 수 있나요?
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





