해결된 질문
작성
·
279
·
수정됨
0
안녕하세요, 제로초 님,
강의 덕분에, 타입 없는 라이브러리도 도전?해볼 수 있게 됐습니다. :]
강좌 보면서 3가지 코드 관련해 궁금해 문의 드립니다
1. '시퀄라이즈', 18:22, '[key:string]:string'
2. '라우터 만들기' , 6:05, delete user.password;
3. serializeUser와 deserializeUser 에러해결 코드, passport.deserializeUser<number>
타입스크립트 관련해 고민했던 내용이 '맞는지' 확인 받고 싶습니다,
감사합니다:]
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'
를 넣어보라는 글을 읽은적이 있는데요,
제가 생각하는 추리가 맞는건지요?
const user = req.user?.toJSON() as User;
delete user.password;
return res.json(user);
'delete user.password;'
어떤 이유로
user의 passord를 지우는건가요?
코드 흐름에서
유저의 비밀번호를 지우는게(delete) 어떤 의미인건지 궁금합니다.
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
config에 추가 속성을 자유롭게 더 넣을 수 있게 해주는 겁니다.
프론트로 유저 정보를 보낼 때 비밀번호를 지우는 게 정보보안의 기본 중에 기본입니다.
타입스크립트를 사용할 때 타입 정의를 보는 게 당연합니다. 남이 만든 코드를 안 보고 쓰려고 하는 건 말도 안 되죠.
답변 감사합니다:]
명쾌하게 이해됐습니다!