작성
·
219
0
postPosts 컨트롤러까지 요청이 들어왔다면 Request 객체에 user 프로퍼티가 있는 것은 확실한데
타입스크립트 컴파일러가 인식을 못하는 것 같아요.
앱 실행이 안되는데 어떻게 해결해야 할까요...
답변 2
0
안녕하세요!
문제점은 잘 파악하신 것 같습니다.
그렇게 하셔도 문제는 없습니다.
다만 "postPosts 컨트롤러까지 요청이 들어왔다면 Request 객체에 user 프로퍼티가 있는 것은 확실한데
타입스크립트 컴파일러가 인식을 못하는 것 같아요."는 매우 잘못된 표현입니다. Typescript는 빌드타임 툴이기 때문에 런타임 값들을 당연히 인식 못합니다. 이 부분이 이해가 안된다면 제 JS/TS 강의 참고 부탁드립니다!
감사합니다!
동적으로 추가된 프로퍼티라 Request 타입에 user가 없는게 아니라 실제로 Request 타입에는 user가 없습니다. 그렇기 때문에 Request 타입에 user 타입을 추가하고 싶다면 직접 넣어줘야합니다. (진행하신 방법이 한가지 솔루션이 될 수 있습니다)
TS는 실행과 관계가 없습니다. 빌드타임 타입 체크만 해줍니다.
0
types라는 폴더를 따로 만들고 그 안에 Request interface를 확장한 interface를 다시 만들었습니다.
// request.interface.ts
import {Request} from "@nestjs/common";
import {UsersModel} from "../users/entities/users.entity";
export interface RequestWithUserAndToken extends Request {
user: UsersModel,
token: string,
tokenType: string,
}
// posts.controller.ts
@Post()
@UseGuards(AccessTokenGuard)
postPosts(
@Request() req: RequestWithUserAndToken,
@Body('title') title: string,
@Body('content') content: string,
) {
const authorId = req.user.id;
return this.postsService.createPost(authorId, title, content);
}
선언한 interface를 Request 타입으로 사용해서 컴파일러에게 user 프로퍼티가 있다는 것을 인식하게 했는데
혹시 좋지 못한 방법일까요..?
아... user는 동적으로 추가된 프로퍼티니까 Request 타입 정의에 user 프로퍼티가 없는 게 맞고.. 타입스크립트 컴파일러가 정적 타입 검사 할 때 인식 못하는 거 아닌가요...?
컴파일 언어란 소리는 아니고 타입 컴파일러가 그냥 사전에 타입만 체크해주는 거로 알고 있었는데 이것도 틀린건가요?