簡體   English   中英

通用接口內的 Typescript 函數來推斷參數類型

[英]Typescript function inside generic interface to infer argument type

假設我有一個接受泛型的接口:

interface ObjectKey<T extends {}>{
   key: keyof T
   doSomethingWithKey: (value: any) => void
}

像這樣使用它:

interface User {
   name: string,
   age: number,
   archived: boolean
}

const nameKey: ObjectKey<User> = {
   key: 'name', 
   doSomethingWithKey: (value) => console.log(value) // I want to infer value type here
}

如上所述,我想推斷“值”參數類型。 像這樣:

interface ObjectKey<T extends {}>{
   key: keyof T
   doSomethingWithKey: (value: T[key]) => void
}

我怎樣才能做到這一點?

我試過類似的東西:

interface ObjectKey<T extends {}>{
   key: keyof T
   doSomethingWithKey: (value: { [Property in keyof T]: T[Property] }[keyof T]) => void
}

但它會返回所有可用的 T 類型。例如,如果我們使用用戶界面,“值”參數將是“字符串 | 編號 | 布爾值'

游樂場鏈接

我們可以通過映射對象鍵使ObjectKey成為所有可能組合的聯合類型

type ObjectKey<T extends {}> = {
   [K in keyof T]: {
      key: K, 
      doSomethingWithKey: (value: T[K]) => void
   }
}[keyof T]

interface User {
   name: string,
   age: number,
   archived: boolean
}

const nameKey: ObjectKey<User> = {
   key: 'age', 
   doSomethingWithKey: (value) => console.log(value)
}

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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