게시글
질문&답변
2023.12.19
findCatByIdWithoutPassword 함수 리턴 타입 질문
저도 그 문제를 고민해봐서 찾아본 결과를 공유하겠습니다.우선 Cat의 경우, mongoose의 Document 클래스를 상속받았습니다.그리고 findOne, findById, select 모두 Query 타입을 리턴합니다. (제네릭 타입은 무시했습니다)&는 intersaction 기능을 수행하는 오퍼레이터로 Typescript 에서 서로 다른 필드는 합치고, 같은 필드는 더 작은 범위로 만들어줍니다. 자세한 내용은 공식문서를 참조하시거나 검색해보시면 더 잘 나오지만, 핵심은 이렇습니다.Cat은 Document를 상속받았고,&로 연결시켜도 Cat 에서 더 이상 변하지는 않습니다.무엇보다도 아래 실험을 해보니 Typescript에서 허용하는 것이 있습니다:class BaseClass { prop1: string; } class ClassA extends BaseClass { prop2: string | number; } type Combined = ClassA & BaseClass; const combinedObject: BaseClass = { prop1: "1", prop2: 42, } as ClassA; // Combined also ok상속받아서 확장한 ClassA나 확장된 Combined 타입 모두 상속해준 Base클래스 타입으로 받는 것은 가능하고, 물론 동일한 타입끼리 선언하는 것도 가능합니다. 따라서, 우리가 작성했던 findOne이나 select를 통해 리턴된 값을 Promise로 받는 것도 가능하고 Promise도 허용가능한 타입이 됩니다.여기까지 제가 알아본 내용입니다.도움이 되셨길 바랍니다.
- 1
- 2
- 231
질문&답변
2023.12.18
스케마에서 리드온리로 버츄얼 작성할때 문의가있습니다.
저는 비슷하지만 조금 다른 문제가 생겼었는데요,mongoose 공식문서를 참조했습니다.https://mongoosejs.com/docs/tutorials/virtuals.html 저는 처음에 schema.virtual.get() 의 인자로 arrow function 형식으로 넣었습니다 ()=>{}하지만 this 라는 컨텍스트를 넣어야하는 mongoose 라이브러리는 arrow function이 아닌 기존 function() {} 형식으로 넣어야합니다.그 외에는 강의에서 나온 내용과 따라하면 잘 작동합니다.그리고 강의에서는 function( this: Cat) 이런식으로 넣는데, 사실 인자를 넣어도 안 쓰입니다. 공식문서에서도 get 에는 인자가 없는 함수를 사용합니다.
- 0
- 4
- 350