이것은 긴 이야기...
이 전에 써둔 글의 마지막에 커스텀 리퀘스트 타입에 제네릭을 적용했다고 적어두었다
그런데 오류가 어마무시하게 남..
'(req: AuthRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>' 형식의 인수는 'RequestHandlerParams<ParamsDictionary, any, any, ParsedQs, Record<string, any>>' 형식의 매개 변수에 할당될 수 없습니다.
'(req: AuthRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>' 형식은 'RequestHandler<ParamsDictionary, any, any, ParsedQs, Record<string, any>>' 형식에 할당할 수 없습니다.
'Promise<Response<any, Record<string, any>> | undefined>' 형식은 'void | Promise' 형식에 할당할 수 없습니다.
'Promise<Response<any, Record<string, any>> | undefined>' 형식은 'Promise' 형식에 할당할 수 없습니다.
'Response<any, Record<string, any>> | undefined' 형식은 'void' 형식에 할당할 수 없습니다.
'Response<any, Record<string, any>>' 형식은 'void' 형식에 할당할 수 없습니다.ts(2769)
해결해보러 갑쉬다

구글링을 열심히 하다가 Request 타입을 확장하는 글을 몇 번 보고
AuthRequest가 문제라면 Request를 확장해서 써보면 되지 않을까? 하는 생각으로 Request타입을 확장해보기로 함!
declare module "express" {
interface Request {
user?: User;
}
}
user는 문제 없이 읽어왔으나, 오류를 해결해주지는 못했다
AuthRequest와 같은 오류가 계속 되었다
오류 내용에 Promise에 대한 이야기가 있어서 반환값을 바꾸어 보기로했다.
Promise<Response<any, Record<string, any>> | undefined>' 형식은 'Promise' 형식에 할당할 수 없습니다.
return res.status(200).json({ result });
res.status(200).json({ result });
간단하게 return을 빼버렸다 이러면 Void가 됨...
결과는~~
오류 내용이 조금 바뀜
이 호출과 일치하는 오버로드가 없습니다.
마지막 오버로드에서 다음 오류가 발생했습니다.
'(req: Request<CommentDeleteDto, {}, {}>, res: Response, next: NextFunction) => Promise' 형식의 인수는 'RequestHandlerParams<ParamsDictionary, any, {}, ParsedQs, Record<string, any>>' 형식의 매개 변수에 할당될 수 없습니다.
'(req: Request<CommentDeleteDto, {}, {}>, res: Response, next: NextFunction) => Promise' 형식은 'RequestHandler<ParamsDictionary, any, {}, ParsedQs, Record<string, any>>' 형식에 할당할 수 없습니다.
'req' 및 'req' 매개 변수의 형식이 호환되지 않습니다.
'Request<ParamsDictionary, any, {}, ParsedQs, Record<string, any>>' 형식은 'Request<CommentDeleteDto, {}, {}, ParsedQs, Record<string, any>>' 형식에 할당할 수 없습니다.
'params' 속성의 형식이 호환되지 않습니다.
'ParamsDictionary' 형식에 'CommentDeleteDto' 형식의 commentId, userId 속성이 없습니다.ts(2769)
index.d.ts(157, 5): 여기서 마지막 오버로드가 선언됩니다.
'ParamsDictionary' 형식에 'CommentDeleteDto' 형식의 commentId, userId 속성이 없습니다
params 제네릭에 넣은 CommentDeleteDto 타입이 아무래도 문제인듯하여
req: Request<{ commentId: number }, {}, CommentUpdateDto>,
이렇게 넣어주었다
하지만 오류가..남..
'commentId' 속성이 'ParamsDictionary' 형식에 없지만 '{ commentId: number; }' 형식에서 필수입니다.ts(2769)
음 이게 무슨 소리지...
검색해봐도 잘 모르겠어서 GPT선생에게 물어보았다
TypeScript에서 params는 기본적으로 항상 string 타입을 가짐
req.params를 URL에서 가져오므로, 숫자로 보이더라도 string으로 저장됨.
-> 따라서 Request<{ commentId: string }>을 사용하면 req.params.commentId가 string임을 보장할 수 있다

어......아 그러니까... params는 어쨌든 String값이라 타입을 string으로 적어주는게 맞다는...것이였다!!
req: Request<{ commentId: string }, {}, CommentUpdateDto>,
제네릭에 string타입으로 지정해주니 오류가 사라졌다... 마참내!!
혹시 커스텀 리퀘스트 타입의 문제는 아니였을까?하고 바뀐코드에서 Request를 AuthRequest로 바꾸어봤다
-> 오류 안 남!!!
그럼 return을 지워보면?
Promise<Response<any, Record<string, any>> | undefined>' 형식은 'Promise' 형식에 할당할 수 없습니다.
오류가 재등장
얌전히 Void로 냅뒀다
어렵다 어려워 타입스크립트
사실 오류를 해결하기 위해 이것저것 해봤으나
다 실패하고 결국 포기하고 걍 잤다ㅋㅋㅋㅋㅋ
그리고 아침에 일어나서 다시 해결해보려고하니 해결..됨.. 뭐임
암튼 그런 이야기입니다