인프런 커뮤니티 질문&답변

프린이님의 프로필 이미지
프린이

작성한 질문수

Node.js에 TypeScript 적용하기(feat. NodeBird)

강좌에서 사용된 3개의 코드 의미가 궁금합니다 [ 코드 : 1. [ key:string]:string] 2. delete user.password , 3.passport.deserializeUser<number> ]

해결된 질문

작성

·

279

·

수정됨

0

안녕하세요, 제로초 님,

강의 덕분에, 타입 없는 라이브러리도 도전?해볼 수 있게 됐습니다. :]

강좌 보면서 3가지 코드 관련해 궁금해 문의 드립니다

1. '시퀄라이즈', 18:22, '[key:string]:string'
2. '라우터 만들기' , 6:05, delete user.password;
3. serializeUser와 deserializeUser 에러해결 코드, passport.deserializeUser<number>

타입스크립트 관련해 고민했던 내용이 '맞는지' 확인 받고 싶습니다,
감사합니다:]


#1.

'시퀄라이즈' 18:22, '[key:string]:string'

config의 타입을 만들때,

'[key:string]:string' 코드를 넣는 이유가 궁금합니다

 

'dialect'의 타입부분이 유동적으로 변하기 때문에,

기본 틀(key는 string, value는 string) 목적으로 작성하는 것인가요?

 

const { database, username, password } = config[env]; 처럼,

key에 해당하는 value를 찾기 위해서

'[key:string]:string'가 필요한지 궁금합니다.

 

(검색해보면, 타입스크립트 Index Signature 관련해 글이 나옵니다)
타입스크립트에서 객체의 key로 value를 찾을 때,

에러 해결 코드로

'[key:string]:string'를 넣어보라는 글을 읽은적이 있는데요,

제가 생각하는 추리가 맞는건지요?

 

 

#2.

'라우터 만들기' 파트, 6:05 에서

 const user = req.user?.toJSON() as User;
 delete user.password;
 return res.json(user);
 'delete user.password;'

어떤 이유로

user의 passord를 지우는건가요?

코드 흐름에서

유저의 비밀번호를 지우는게(delete) 어떤 의미인건지 궁금합니다.

 

#3.

passport.deserializeUser<number>

serializeUser와 deserializeUser 에러 관련해 올려주신 코드에서,

deserializeUser에 제네릭 <number>을 어떻게 넣을 수 있으셨는지 '그 방법이' 궁금해 문의드립니다.

 

passport.deserializeUser<number>(async (id, done) => { ...중략...});

passport.deserializeUser 의 id가

user의 id이고,

id의 타입이 number 이기 때문에

제네릭 number을 넣으신거라고 이해했는데요,

 

passport.deserializeUser 메서드를 마우스 호버해보니

(method) passport.Authenticator<e.Handler, any, any, passport.AuthenticateOptions>.deserializeUser<unknown>(fn: (id: unknown, done: (err: any, user?: false | Express.User | null | undefined) => void) => void): void (+1 overload)

deserializeUser의 제네릭 타입이 id와 연결되어 있습니다,

 

deserializeUser<unknown> ,

id: unknown

passport.deserializeUser<number>

라고 코드를 변경하니

deserializeUser 메서드와 id 타입이 number 타입으로 바인딩되서 나옵니다,

 

(method) passport.Authenticator<e.Handler, any, any, passport.AuthenticateOptions>.deserializeUser<number>(fn: (id: number, done: (err: any, user?: false | Express.User | null | undefined) => void) => void): void (+1 overload)

 

혹시,

타입스크립트에서 타입을 제대로 넣으려면( = 타입스크립트를 제대로 사용하려면),

함수/변수 를 클릭해 index.d.ts를 이리저리 읽어보거나,

Vscode가 알려주는 타입을 확인하는 습관이 중요한건지요?

(당연, 자바스크립트를 잘 아는 것도 중요하지만,,)

 

강좌에서 말씀 해주셨던 내용들이랑

위의 serializeUser와 deserializeUser 에러 리팩토링 된 코드를 보면서

제대로 생각 정리가 됐는지 궁금해 문의드립니다.

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

  1. config에 추가 속성을 자유롭게 더 넣을 수 있게 해주는 겁니다.

  2. 프론트로 유저 정보를 보낼 때 비밀번호를 지우는 게 정보보안의 기본 중에 기본입니다.

  3. 타입스크립트를 사용할 때 타입 정의를 보는 게 당연합니다. 남이 만든 코드를 안 보고 쓰려고 하는 건 말도 안 되죠.

프린이님의 프로필 이미지
프린이
질문자

답변 감사합니다:]
명쾌하게 이해됐습니다!

프린이님의 프로필 이미지
프린이

작성한 질문수

질문하기