[英]Complex generic type constraint
我正在嘗試編寫一個 function getDocument
它將執行以下操作:
interface DocumentReference<T> {
get(): Promise<T>;
}
interface ParentA {
foo: DocumentReference<User>;
}
interface ParentB {
bar: DocumentReference<Company>;
}
// getDocument<ParentType>(parent: ParentType, fieldName: keyof ParentType): Promise<???>
getDocument(parentA, 'foo') // return a Promise<User>
getDocument(parentB, 'bar') // return a Promise<Company>
我一直在為getDocument
嘗試許多不同的通用簽名組合,但無法弄清楚如何限制fieldName
以使其對應於DocumentReference
類型的字段值。 我也不知道如何將DocumentReference<T>
的泛型參數提取到返回類型中。
這在 typescript 中可行嗎? 如果是,任何指針?
interface User {
a: number
}
interface Company {
b: string
}
interface DocumentReference<T> {
get(): Promise<T>;
}
interface ParentA {
foo: DocumentReference<User>;
}
interface ParentB {
bar: DocumentReference<Company>;
}
declare function getDocument<T extends ParentA | ParentB, K extends keyof T>(value: T, key: K): Promise<T[K] extends DocumentReference<infer R> ? R : never>;
declare const parentA: ParentA
declare const parentB: ParentB
getDocument(parentA,'foo')
getDocument(parentB,'bar')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.