컴파일 에러
202
8 asked
안녕하세요, 강의 잘 듣구 있습니다.
다름이 아니라 reduce 가 포함된 파일을 컴파일하면 그림과 같은 에러가 납니다.

에러 해결을 위해서 아래 두 가지 방법을 시도해보았습니다.
에러메세지처럼 reduce 함수의 정의에 A extends Acc 로 명시
이 해결방법은 옳지 않은 것 같다고 생각했습니다. (A -> number, Acc -> string 인 경우)
else 문에 있는 baseReduce 를 Acc 타입으로 강제 캐스팅
책과 강의 코드 모두 살펴봐도 크게 다른 점이 없는 것 같아 질문드립니다.
감사합니다!
(제가 작성한 코드 첨부드립니다)
function baseReduce<A, Acc>(
f: (acc: Acc, a: A) => Acc,
acc: Acc,
iterator: Iterator<A>
): Acc {
while (true) {
const { done, value: a } = iterator.next();
if (done) {
break;
}
acc = f(acc, a);
}
return acc;
}
function reduce<A, Acc>(f: (a: A, b: A) => Acc, iterable: Iterable<A>): Acc;
function reduce<A, Acc>(
f: (acc: Acc, a: A) => Acc,
acc: Acc,
iterable: Iterable<A>
): Acc;
function reduce<A, Acc>(
f: (acc: Acc | A, a: A) => Acc,
accOrIterable: Acc | Iterable<A>,
iterable?: Iterable<A>
): Acc {
if (iterable === undefined) {
iterable = accOrIterable as Iterable<A>;
const iterator = iterable[Symbol.iterator]();
const { done, value: acc } = iterator.next();
if (done) {
throw new TypeError('reduce of empty iterable with no initial value');
}
return baseReduce(f, acc, iterator) as Acc;
} else {
// 왜 타입변환을 강제해야하는가..??
return baseReduce(
f,
accOrIterable as Acc,
iterable[Symbol.iterator]()
) as Acc;
}
}
Answer 2
0
안녕하세요, 인프런 AI 인턴입니다.
chul kim님께서 직면하신 문제는 TypeScript의 타입 시스템과 관련된 흔한 난제 중 하나입니다. 이 코드에서 TypeScript는 Acc 타입이 A | Acc 타입과 어떻게든 호환되지 않는다고 경고하고 있습니다. 여기선 몇 가지 해결책을 제안할 수 있습니다.
제네릭 타입 제한:
reduce함수의 첫 번째 시도처럼A를Acc로 강제하는 방식은 근본적인 문제를 해결하지 못하는 상황일 수 있습니다. 특히A와Acc가 동일한 타입이 아니거나 서브타입을 이룰 때 문제가 발생할 수 있습니다. 따라서, 때에 따라 이 접근법은 적절하지 않을 수 있습니다.타입 캐스팅:
현재Acc타입으로 강제 캐스팅하는 방법을 사용하고 계신데, 강제로 타입을 캐스팅하는 것은 안정적이지 않을 수 있으며, 코드의 의도를 명확히 파악하기 어렵게 할 수 있습니다. 다만, 이 방법도 현실적인 상황에서는 어쩔 수 없이 사용해야 할 경우도 있습니다.타입 커서마이징:
A와 Acc는 실제로 다를 수 있습니다. 만약Acc가A타입을 포함할 수 있으며 이를 더 넓은 타입으로 지정할 수 있다면, 이 점을 바탕으로 타입을 재구성하거나 고쳐 나갈 수 있습니다. 즉, 타입을 더 잘 정의하고 그에 맞게 코드를 변경하는 방법을 검토해보세요.
다음은 관련 사례에서 비슷한 문제를 다뤘던 질문과 답변입니다. 참고하시길 바랍니다:
아래 링크에서는 함수형 프로그래밍과 관련된 패턴 및 TypeScript의 타입 시스템 관련 질문을 확인할 수 있습니다. 문제 해결에 도움이 되길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
타입 점검하기 swr관련 질문 있습니다.
0
13
2
11장 미션에 이메일 남기는걸 누락했어요.
0
7
0
타입스크립트 autoComplete?
0
10
1
primitive에 onClick 이벤트가 안되는 경우
0
10
1
감정일기장 vercel 배포 후 새로 고침 시 404페이지가 뜨는 이유
0
14
2
피그마 스타일링 질문
0
16
2
자료실
1
20
2
Sort 메서드 관련 아티클
0
23
2
Zustand의 Store 타입은 어떤 기준으로 작성하는 건가요?
0
21
2
4.1) React.js를 소개합니다 강의를 듣고 궁금한 점이 생겼습니다.
0
20
2
1과업 = 1세션 에대한 질문
0
46
2
html, body에 적용하는 css 스타일 질문입니다.
0
23
2
백준 서비스 종료인데 조치 없나요?
0
51
1
html / css 기초는 있습니다..
0
35
2
완강 후 느낀점
1
66
1
Shape 클래스 실습 코드 피드백 요청드립니다
0
25
2
모든 컴포넌트를 클라이언트 컴포넌트로 했을 때
0
21
3
캬 그동안 클로드 코드 100달러 주고 1달러치 사용하고있었네요
1
59
1
상태 기반 데이터관리에서 특정 시점에 대한 정보는 어떻게 관리할 수 있나요?
0
24
1
섹션4 퀴즈 오타있어요.
0
28
1
ReactScriptExample 관련 질문
0
31
1
예제 소스코드 실행 관련 문의
0
93
1
멀티패러다임 프로그래밍 책
0
171
2
강의 커리큘럼 관련 질문
0
230
1

