![](/img/trans.png)
[英]Sorting an array of objects based on string property in Typescript
[英]Typescript: Return array of mapped objects based on string[]
我想創建一個 function,它基於字符串數組返回我需要的 mongo collections。
這就是我現在所處的位置。
type CollectionNames = 'users' | 'orders';
type CollectionMap = {
users: User;
orders: Order;
};
type CollectionsArray<T extends CollectionNames[]> = {
[K in keyof T]: mongodb.Collection<CollectionMap[T[K]]>;
};
type CollectionAndConn<T extends CollectionNames[]> = {
conn: mongodb.MongoClient;
collections: CollectionsArray<T>; //mongodb.Collection<CollectionMap[T]>[];
};
export const mongo = async <T extends CollectionNames[]>(collectionNames: T): Promise<CollectionAndConn<T>> => {
const conn = await MongoClient.connect(`${MONGO_URL}`, {});
return {
conn,
collections: collectionNames.map((collectionName) => conn.db().collection(collectionName)) as CollectionsArray<T>,
};
};
這就是我想這樣稱呼它:
const {
conn,
collections: [usersCollection, ordersCollection],
} = await mongo(['users', 'orders']);
現在我的 TS 認為 userCollection 和 ordersCollection 都是mongodb.Collection<User | Order>
mongodb.Collection<User | Order>
我想讓它知道 userCollection 應該是mongodb.Collection<User>
和 ordersCollection 應該是mongodb.Collection<Order>
基於字符串 [] 我傳遞給 ZC1C4252068E68394F1C1
/彼得
如果將mongo
定義中的collectionNames: T
替換為collectionNames: [...T]
, TypeScript 會將 T 視為元組類型並推斷出正確的返回類型:
const mongo = async <T extends CollectionNames[]>(
collectionNames: [...T]
): Promise<CollectionAndConn<T>> => {
..
}
const {
conn,
collections: [usersCollection, ordersCollection],
// (property) collections: [mongodb.Collection<User>, mongodb.Collection<Order>]
} = await mongo(['users', 'orders']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.