inflearn logo
강의

Course

Instructor

Multi-paradigm Programming Part 1: Iterator Pattern & LISP (with TypeScript, Clojure, Kotlin)

Reduce function and function overloading

컴파일 에러

172

chul kim

8 asked

0

안녕하세요, 강의 잘 듣구 있습니다.

다름이 아니라 reduce 가 포함된 파일을 컴파일하면 그림과 같은 에러가 납니다.

 

image.png

 

에러 해결을 위해서 아래 두 가지 방법을 시도해보았습니다.

 

책과 강의 코드 모두 살펴봐도 크게 다른 점이 없는 것 같아 질문드립니다.

 

감사합니다!

(제가 작성한 코드 첨부드립니다) 

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;
  }
}

 

javascript 함수형-프로그래밍 typescript 객체지향 소프트웨어-설계 멀티-패러다임-프로그래밍

Answer 2

0

mduniv

타입스크립트 버전과 tsconfig 설정을 알려주실 수 있을까요? 그리고 공식 예제 저장소와 비교부탁드릴게요! 혹시 그래도 문제 있다면 말씀부탁드릴게요 :)

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
chul kim님께서 직면하신 문제는 TypeScript의 타입 시스템과 관련된 흔한 난제 중 하나입니다. 이 코드에서 TypeScript는 Acc 타입이 A | Acc 타입과 어떻게든 호환되지 않는다고 경고하고 있습니다. 여기선 몇 가지 해결책을 제안할 수 있습니다.

  1. 제네릭 타입 제한:
    reduce 함수의 첫 번째 시도처럼 AAcc로 강제하는 방식은 근본적인 문제를 해결하지 못하는 상황일 수 있습니다. 특히 AAcc가 동일한 타입이 아니거나 서브타입을 이룰 때 문제가 발생할 수 있습니다. 따라서, 때에 따라 이 접근법은 적절하지 않을 수 있습니다.

  2. 타입 캐스팅:
    현재 Acc 타입으로 강제 캐스팅하는 방법을 사용하고 계신데, 강제로 타입을 캐스팅하는 것은 안정적이지 않을 수 있으며, 코드의 의도를 명확히 파악하기 어렵게 할 수 있습니다. 다만, 이 방법도 현실적인 상황에서는 어쩔 수 없이 사용해야 할 경우도 있습니다.

  3. 타입 커서마이징:
    A와 Acc는 실제로 다를 수 있습니다. 만약 AccA 타입을 포함할 수 있으며 이를 더 넓은 타입으로 지정할 수 있다면, 이 점을 바탕으로 타입을 재구성하거나 고쳐 나갈 수 있습니다. 즉, 타입을 더 잘 정의하고 그에 맞게 코드를 변경하는 방법을 검토해보세요.

다음은 관련 사례에서 비슷한 문제를 다뤘던 질문과 답변입니다. 참고하시길 바랍니다:

아래 링크에서는 함수형 프로그래밍과 관련된 패턴 및 TypeScript의 타입 시스템 관련 질문을 확인할 수 있습니다. 문제 해결에 도움이 되길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

PPT 자료 공유 받을 수 있을까요?

0

9

1

본 강의와는 상관없는 내용입니다만..

0

9

1

OEM에서 하는 A-SPICE

0

10

1

4주차 미션 게시판이 안보여요~

0

19

1

eas 빌드가 엄청 오래걸려서..

0

31

2

일반 강의와 차이점?

1

25

1

!= 연산자의 역할

0

25

1

[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.

0

26

1

중요하진 않지만 설명하신부분에서 안된부분..

0

22

0

자연키 vs 대리키 실무질문

0

17

1

강의 듣는 순서가 어떻게 되나요?

0

38

1

김영한로드맵으로 백엔드개발자가 될 수 있나요?

0

49

2

stopPropagation()에 대해서 질문 있습니다.

0

36

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

49

2

27강 Context내 RSC 사용 관련 문의

0

61

3

문제2번

0

69

2

혹시 다음 강의 제작 예정된 것들이 있을까요?

0

54

1

1:N 관계에서 중간테이블 (연관엔티티)

0

43

2

Enable Linting 항목을 찾을수가 없습니다.

0

36

2

에러 질문드립니다

0

52

2

공통코드 관련한 질문 드립니다.

0

54

1

예제 소스코드 실행 관련 문의

0

60

1

멀티패러다임 프로그래밍 책

0

146

2

강의 커리큘럼 관련 질문

0

206

1