타입스크립트 활용 질문
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를 사용했다 판단하는 것인지 궁금합니다.
답변 1
1
일단 타입스크립트에서 as를 써서 타이핑을 하는 건 거의 잘못이라고 보시면 됩니다. 타이핑을 했는데도 타입 에러가 나는 경우가 타입을 헛으로 붙인 대표적인 케이스고요. any 타입을 쓰거나 as를 통해서 하는 경우 제일 많이 발생합니다.
0
그런데 위의 경우엔 info의 타입이 d.ts에선
info?: object | string | Array<string | undefined>,이던데 이 상황에서 info.message를 꺼내 쓰려고 하면
'string | object | (string | undefined)[]' 형식에 'message' 속성이 없습니다.
'string' 형식에 'message' 속성이 없습니다.ts(2339)
에러가 뜨는데 이 상황에서 as말고 다른 방법이 있나요?
0
passport.authenticate("local", (authError: any, user: Express.User | false | null, info: { message: string }) => {이렇게 콜백함수 자체의 타입을 빼고 매개변수에 타입을 직접 넣어주는 식으로 에러를 해결했는데 이러면 아까 as붙인 것보다 괜찮나요?
깃헙 질문
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





