我有這樣的界面...
export interface IMyInterface {
test1: {
test1Sub: {
test1SubSub: string
}
},
test2: {
test2Sub: {
test2SubSub: string
}
}
}
我希望能夠將嵌套級別的名稱強輸入到一個泛型函式中,以便為 TypeScript 智能感知提供類似這樣的東西,它在一個傳入 Type T 的泛型類中。
getSetting = (level1: keyof T, level2: keyof keyof T) => {
console.log(level1, level2)
}
這可能嗎?我現在如何擁有它,它給了我這個警告,它適用于'test1'但不是'test1Sub;
settings.getPageSettings('test1', 'test1Sub')
'"test1Sub"' 型別的引數不能分配給 '"toString" 型別的引數 | “價值” | "toLocaleString"'
uj5u.com熱心網友回復:
您不想要keyof keyof子級別,因為這將是keys由 定義的每種型別keyof IMyInterface,而是您想要keyof T[K]
這是一個快速的游樂場。
export interface IMyInterface {
test1: {
test1Sub: {
test1SubSub: string
}
},
test2: {
test2Sub: {
test2SubSub: string
}
}
}
function getSetting<T extends IMyInterface, K extends keyof T>(level1: K, level2: keyof T[K]) {
console.log(level1, level2)
}
// usage
const myInterface:IMyInterface ={
test1: {
test1Sub: {
test1SubSub: 'subsub1'
}
},
test2: {
test2Sub: {
test2SubSub: 'subsub2'
}
}
}
getSetting('test1', 'test1Sub');
getSetting('test2', 'test1Sub');
// ^^^^^^^^
// Argument of type '"test1Sub"' is not assignable to parameter of type '"test2Sub"'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433048.html
標籤:javascript 打字稿
上一篇:正則運算式只接受5個數字,然后是打字稿上的破折號或字母
下一篇:打字稿定義方法引數的型別
