inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

내가 만든 파일 타입스크립트로 전환하기

타입스크립트 활용 질문

해결된 질문

899

roider2316

작성한 질문수 52

0

controllers/auth.ts의

 passport.authenticate("local", (authError, user, info) => { ...

부분에서 콜백함수의 매개변수들에 "매개 변수에는 암시적으로 'any' 형식이 포함됩니다.ts(7006)" 이런 에러가 발생해서

const callback: AuthenticateCallback  = (authError, user, info) => { ...

이렇게 분리해서 타입을 붙여줬고, 매개변수 에러는 없어졌지만 밑에

if (!user) {
      // 로직 실패 (유저가 없을 때)
      return res.redirect(`/?loginError=${info.message}`);
    }

여기에서 info에선 "(parameter) info: string | object | (string | undefined)[] | undefined

개체가 'undefined'인 것 같습니다.ts(2532)" 에러가 뜨고
message에선 "'string | object | (string | undefined)[]' 형식에 'message' 속성이 없습니다.
'string' 형식에 'message' 속성이 없습니다.ts(2339)"

에러가 떠서

if (!user) {
  // 로직 실패 (유저가 없을 때)
  const infoWithMessage = info as { message: string };
  return res.redirect(`/?loginError=${infoWithMessage.message}`);
}

이런식으로 타입에러 처리를 해줬습니다.

그런데 테스트 코드 짤 때 100%가 나왔다 하더라도 의미없는 테스트 코드를 짤 수 있다고 경고하신 것처럼 이것도 타입스크립트 에러 처리를 해도 타입스크립트를 제대로 활용해서 타입 명시를 한 것인지, 아니면 그냥 에러 지우기만을 위해서 꼼수를 부린 것인지 어떻게 판단해야 할 지 모르겠습니다. 위 경우에 제대로 사용한 것이 맞는지, 어떤 기준으로 제대로 TS를 사용했다 판단하는 것인지 궁금합니다.

 

 

node.js mysql mongodb express typescript socket.io jwt

답변 1

1

제로초(조현영)

일단 타입스크립트에서 as를 써서 타이핑을 하는 건 거의 잘못이라고 보시면 됩니다. 타이핑을 했는데도 타입 에러가 나는 경우가 타입을 헛으로 붙인 대표적인 케이스고요. any 타입을 쓰거나 as를 통해서 하는 경우 제일 많이 발생합니다.

0

roider2316

그런데 위의 경우엔 info의 타입이 d.ts에선

info?: object | string | Array<string | undefined>,

이던데 이 상황에서 info.message를 꺼내 쓰려고 하면

'string | object | (string | undefined)[]' 형식에 'message' 속성이 없습니다.
'string' 형식에 'message' 속성이 없습니다.ts(2339)

에러가 뜨는데 이 상황에서 as말고 다른 방법이 있나요?

1

제로초(조현영)

매개변수 info에 타이핑하면되죠

0

roider2316

 passport.authenticate("local", (authError: any, user:  Express.User | false | null, info: { message: string }) => {

이렇게 콜백함수 자체의 타입을 빼고 매개변수에 타입을 직접 넣어주는 식으로 에러를 해결했는데 이러면 아까 as붙인 것보다 괜찮나요?

 

1

제로초(조현영)

괜찮다 정도가 아니라 그렇게 하셔야 합니다

0

roider2316

아 그렇군요. 감사합니다!!

깃헙 질문

0

82

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

76

1

aws - lightsail 이용 관련

0

58

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

81

2

모듈 사용 시 단점이 있나요?

0

81

1

node.js 버전 및 typescript 적용 문의

0

95

2

12.7. 방장기능(강퇴) 질문드립니다.

0

80

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

69

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

75

2

12.7.1스스로 해보기 질문되나요

0

95

3

시퀄라이즈 실습하기 질문드립니다.

0

196

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

97

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

113

2

구매 결제관련 질문입니다 !

0

123

1

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

0

133

2

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

152

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

122

2

무료/프리미엄 동시 소유 시 질문

0

117

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

135

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

159

2

webstorm 해결할 수 없는 변수 문제

0

155

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

149

2

LightSail 실행 중 오류 질문드립니다!

0

204

2

RedisStore 사용법 질문

0

133

2