inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

339

프린이

작성한 질문수 21

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 에러 리팩토링 된 코드를 보면서

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

 

typescript nodejs 웹앱

답변 1

0

제로초(조현영)

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

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

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

0

프린이

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

'S3' 형식에 'S3Client' 형식의 destroy, middlewareStack, send 속성이 없습니다.ts(2739)

0

509

1

throw new Error(&amp;#x60;${this.name}.hasMany called with something that&amp;#x27;s not a subclass of Sequelize.Model&amp;#x60;); 에러 질문

0

343

1

안녕하세요.. connect ECONNREFUSED 127.0.0.1:3306 관련해서 질문드립니다

0

958

1

@types를 dependencies에 넣는 이유?

0

401

1

JS에서 babel 사용시 `import * as` 구문을 안써도되는데, 바벨이 esModuleInterop: true 로 처리해주는 것인가요?

0

318

1

Sequelize Association 오류

0

514

2

Sequelize constructor.primaryKeyAttributes 오류

0

973

1

Sequelize에 요청을 보내면 오류가 뜹니다

0

797

1

@mui/x-data-grid 에 사용자정의 컬럼 타입을 추가해서 사용하려고 합니다.

0

2621

1

미들웨어 에러

1

313

1

Could not find a declaration file for mould '../utils/jwt-utils'

1

181

1

마지막에 type과 interface 추가하는 부분

0

218

1

다른 컴퓨터에서 제가 만든 DB 테이블의 데이터를 그대로 사용하려면?

0

282

1

express 모듈 에러 관련

0

241

1

import * as A from 'B'

0

216

1

MySql ssl 보안 옵션 질문 입니다.

0

353

2

passport/index.ts 에러 입니다

1

453

1

routes/post.ts 페이지에서 에러나요..

0

315

1

passport/index.ts 에러납니다...

0

818

1

ts import 에러

0

443

1

타입스크립트로 변환후 nextjs 빌드 후 배포

0

263

1

sequelize include 질문드립니다.!

0

192

1

roperty 'id' does not exist on type 'User'.

0

900

1

passport user.id 질문드립니다.

0

204

1