我正在嘗試將型別定義為給定物件的二級鍵。例如,對于物件:
const myObj = {
vegetabes: {
legumes: ['chickpea', 'garbanzo', 'lentil'],
tubers: ['potatoe', 'carrot']
},
meat: {
farm: ['cow', 'goat', 'lamb'],
wild: ['deer', 'bear']
}
}
和功能
const findRecipe = (firstLevelKey: keyof typeof myObj, secondLevelKey: ?????) => {
const collection = myObj[firstLevelKey][secondLevelKey]
...
}
我應該給出什么型別secondLevelKey以使其僅限于選定的鍵firstLevelKey?例如:如果我呼叫findRecipe('vegetabes', ...)第二個引數的唯一有效值是legumesand tubers。如果這不可能,則限制為任何二級鍵legumes、tubers和.farm就足夠了wild。但理想的情況是基于第一個鍵進行限制。
如果有人知道如何讓它在通用函式上作業,<T>(firstLevelKey: keyof T, secondLevelKey: ?????) => {...}那也很好。但重要的部分將是上一段中描述的內容
uj5u.com熱心網友回復:
您可能希望引入一個泛型以確保鍵正確關聯:
const findRecipe = <T extends keyof typeof myObj>(
firstLevelKey: T,
secondLevelKey: keyof typeof myObj[T]) => {
const collection = myObj[firstLevelKey][secondLevelKey]
}
完全通用的版本是這樣的:
function genericAccess<T, K extends keyof T>(
instance: T,
firstLevelKey: K,
secondLevelKey: keyof T[K]
) {
const item = instance[firstLevelKey][secondLevelKey];
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/472039.html
標籤:打字稿
