[TypeScript][Ajuda]
Poderiam me ajudar a melhorar esse código?
O meu objetivo com essa função é poder fazer um get em qualquer collection do banco de dados a partir de uma Unique-Key.
O meu maior problema foi com a tipagem dessa função.
(Os nomes das variaveis tbm n são os melhores)
import { db } from "@/db"
import { TransactionInterface, UserInterface } from "@/interfaces"
type CollectionsData = {
users: UserInterface
transactions: TransactionInterface
}
type UniqueUserKeys = Pick<UserInterface, "_id" | "email">
type UniqueTransactionKeys = Pick<TransactionInterface, "_id" | "userId">
type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<
T,
Exclude<keyof T, Keys>
> &
{
[K in Keys]-?: Required<Pick<T, K>> &
Partial<Record<Exclude<Keys, K>, undefined>>
}[Keys]
type UniqueCollectionsKeys = {
users: RequireOnlyOne<UniqueUserKeys>
transactions: RequireOnlyOne<UniqueTransactionKeys>
}
type UniqueCollectionsKeysData = {
[Key in keyof UniqueCollectionsKeys]: {
collectionName: Key
uniqueKey: UniqueCollectionsKeys[Key]
}
}[keyof UniqueCollectionsKeys]
const getByUnique = async <T extends keyof CollectionsData>(
collection: UniqueCollectionsKeysData
): Promise<CollectionsData[T] | null> => {
const result = await db
.collection(collection.collectionName)
.findOne(collection.uniqueKey)
return result || null
}
export default {
getByUnique,
}