강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

mj님의 프로필 이미지
mj

작성한 질문수

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

filter 타입 직접 만들기

타입만들기가 아직 너무 어렵습니다. 혼자 문제를 만들어 풀어보다가 문의드립니다.

작성

·

683

0

const obj = {
  a: '1',
  p: '2',
  l: '3',
};

const test = (v) => {
  return v.replace(/a|p|l/gi, (matched) => {
    return obj[matched];
  });
};
test('apple'); // 기대되는값 1223e

replace를 이용해서 한번 여기에 타입을 달아보고 싶어서

  const test = (v: string) => {
    const matchedFunc: (
      matched: keyof typeof obj,
    ) => typeof obj[keyof typeof obj] = (matched) => {
      return obj[matched];
    };
    return v.replace(/a|p|l/gi, matchedFunc);
  };

이런식으로 수정을 시도했는데 일치하는 오버로드가 없다고 나옵니다..

 

interface Arr<T> {
    replace():void;
}

강의에서처럼 이렇게 두고 수정을 해보려고 해보았지만 아직 너무 어려운거 같습니다. 어떻게 하는게 좋을지 의견부탁드립니다.

퀴즈

타입스크립트에서 Array의 forEach나 map 메서드가 배열 요소의 타입을 기반으로 콜백 함수의 매개변수 타입을 자동으로 추론하는 주된 이유는 무엇인가요?

타입 별칭(Type Alias)을 사용했기 때문

any 타입이 기본으로 적용되기 때문

제네릭(Generics)이 활용되기 때문

함수 오버로딩(Overloading)이 선언되었기 때문

답변 2

0

mj님의 프로필 이미지
mj
질문자

말해주신대로 했을때 obj[matched]에서

'string' 형식의 식을 '{ a: string; p: string; l: string; }' 인덱스 형식에 사용할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.
'{ a: string; p: string; l: string; }' 형식에서 'string' 형식의 매개 변수가 포함된 인덱스 시그니처를 찾을 수 없습니다.ts(7053)

라고 에러가 나타나는데 해결이 안되서 점점 이상하게 변했습니다 ..ㅠ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

const obj = {
  a: '1',
  p: '2',
  l: '3',
};

const test = (v: string) => {
  return v.replace(/a|p|l/gi, (matched) => {
    return obj[matched as keyof typeof obj];
  });
};
test('apple');

이렇게 하셔야할 것 같습니다. replace가 정규표현식 메서드라 타입 추론 능력이 부족해서 as 써야 합니다.
mj님의 프로필 이미지
mj
질문자

제가 정말 이상하게 접근을 하려고 했네요 ㅋㅋ

열심히 복습하겠습니다!

답변 감사합니다~!!

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

사실 뭘 하려고 하시는건지 잘 모르겠습니다.

v: string 외에는 타입을 달 필요가 없는 코드입니다.

mj님의 프로필 이미지
mj

작성한 질문수

질문하기