인프런 커뮤니티 질문&답변
타입스크립트 활용 질문
해결된 질문
작성
·
881
·
수정됨
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를 사용했다 판단하는 것인지 궁금합니다.
답변 1
1
일단 타입스크립트에서 as를 써서 타이핑을 하는 건 거의 잘못이라고 보시면 됩니다. 타이핑을 했는데도 타입 에러가 나는 경우가 타입을 헛으로 붙인 대표적인 케이스고요. any 타입을 쓰거나 as를 통해서 하는 경우 제일 많이 발생합니다.
passport.authenticate("local", (authError: any, user: Express.User | false | null, info: { message: string }) => {이렇게 콜백함수 자체의 타입을 빼고 매개변수에 타입을 직접 넣어주는 식으로 에러를 해결했는데 이러면 아까 as붙인 것보다 괜찮나요?






그런데 위의 경우엔 info의 타입이 d.ts에선
이던데 이 상황에서 info.message를 꺼내 쓰려고 하면
'string | object | (string | undefined)[]' 형식에 'message' 속성이 없습니다.
'string' 형식에 'message' 속성이 없습니다.ts(2339)
에러가 뜨는데 이 상황에서 as말고 다른 방법이 있나요?