目前,我的代碼如下所示:
interface TestInterface<T extends string> {
data: {
[key in T]: () => void;
}
}
const testCommand: TestInterface<"fun1"> = {
data: {
fun1: () => {
// do something
},
}
};
testCommand.data.fun1();
我將一個string(在本例中為“fun1”)作為泛型傳遞給該testCommand函式。在data物件中,我可以訪問這個字串/函式“fun1”。
我的問題:我可以將字串陣列作為泛型傳遞以在data物件中有自定義數量的函式(也許將dataobj 轉換為陣列)?
例子:
const testCommand: TestInterface<["fun1", "fun2", "fun3"]> = {
data: {
fun1: () => {
// do something
},
fun2: () => {
// do something
},
fun3: () => {
// do something
},
}
};
或者:
const testCommand: TestInterface<["fun1", "fun2", "fun3"]> = {
data: [
{ name: "fun1", exec: () => {} },
{ name: "fun2", exec: () => {} },
{ name: "fun3", exec: () => {} },
]
};
uj5u.com熱心網友回復:
代替陣列,您可以只傳入要支持的字串文字型別的聯合;生成的映射型別將包含所有鍵:
const testCommand: TestInterface<"fun1" | "fun2" | "fun3"> = {
data: {
fun1: () => {
// do something
},
fun2: () => {
// do something
},
fun3: () => {
// do something
},
}
};
實際上,這非常類似于使用實用Record<K, V>程式 type,在其中您傳入一個鍵型別的聯合 forK和一個值型別 for ,并在所有鍵中V獲取一個具有 type 屬性的型別。VK
Playground 代碼鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523364.html
標籤:节点.js打字稿仿制药
上一篇:如何在應用程式啟動時發出異步http請求并將值保存在Flutter中的小部件內
下一篇:Scala型別橡皮擦
