[英]Nested keyof keyof T in Typescript
我有一个这样的界面......
export interface IMyInterface {
test1: {
test1Sub: {
test1SubSub: string
}
},
test2: {
test2Sub: {
test2SubSub: string
}
}
}
我希望能够将嵌套级别的名称强类型化为通用 function 以提供 TypeScript 类似这样的智能感知,它在传递类型 T 的通用 class 中。
getSetting = (level1: keyof T, level2: keyof keyof T) => {
console.log(level1, level2)
}
这可能吗? 我现在是怎么得到它的,它给了我这个警告,它适用于“test1”但不适用于“test1Sub”;
settings.getPageSettings('test1', 'test1Sub')
“test1Sub”类型的参数不可分配给“toString”类型的参数| “价值” | “toLocaleString”'
您不希望keyof keyof
用于子级别,因为这将是keyof IMyInterface
定义的每种类型的keys
,而是您想要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"'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.