例子
const food = {
fruit: ['apples', 'oranges'],
meat: ['chicken', 'pig']
}
function makeFood(ingredient, category) {
switch(true) {
case category === 'fruit' && ingredient === 'apples' {
// do something
}
case category === 'fruit' && ingredient === 'oranges' {
// do something
}
case category === 'meat' && ingredient === 'chicken' {
// do something
}
case category === 'meat' && ingredient === 'pig' {
// do something
}
}
}
輸入類別是食物的關鍵和成分是價值的最佳方法是什么?
目前我正在做
function(ingredient, keyof typeof category) {
很想保持兩者之間的關系。因此 TS 將根據類別值知道成分型別。
uj5u.com熱心網友回復:
您使用打字稿泛型。在此您希望category成為通用引數,然后可以使用哪種成分。
您需要在源物件上使用as const(參見此處)以確保它的特定字串是其型別的一部分。
const food = {
fruit: ['apples', 'oranges'],
meat: ['chicken', 'pig']
} as const // important to add "as const" here
function makeFood<
K extends keyof typeof food // Generic parameter
>(
ingredient: typeof food[K][number], // use K to lookup types for ingredient
category: K // provide the key to to use here as K
) {
switch(true) {
case category === 'fruit' && ingredient === 'apples': {
// do something
}
case category === 'fruit' && ingredient === 'oranges': {
// do something
}
case category === 'meat' && ingredient === 'chicken': {
// do something
}
case category === 'meat' && ingredient === 'pig': {
// do something
}
}
}
makeFood('apples', 'fruit')
makeFood('pig', 'fruit') // type error
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364984.html
標籤:javascript 打字稿
