簡體   English   中英

復雜的泛型類型約束

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM