我想对所提供对象及其子对象的键进行一个通用类型检查。这个想法是:
type A<T> = {
key: keyof T;
childKey: keyof T[this.key] // i dont know how to make this work
};
如果上述类型有效:
const a = { child1: { param: 1 }, child2: { param: 1 } };
const myObj: A<typeof a> = {
key: "child3", // << child3 is not a key of a
childKey: "param"
}
const myObj: A<typeof a> = {
key: "child1",
childKey: "param2" // << param2 is not a key of a.child1
}
我试过keyof T[this.key]
、keyof T["key"]
、keyof ThisType["key]
,它们都没有给我正确的行为。有人能给我建议吗?
如果我理解正确,您可能希望创建所有有效的key
和childKey
组合的并集。这可以通过映射键和嵌套键来实现。
type A<T> = {
[K1 in keyof T]: {
[K2 in keyof T[K1]]: {
key: K1,
childKey: K2
}
}[keyof T[K1]]
}[keyof T]
const myObj: A<typeof a> = {
key: "child3", // Type '"child3"' is not assignable to type '"child1" | "child2"'
childKey: "param"
}
const myObj2: A<typeof a> = {
key: "child1",
childKey: "param2" // Type '"param2"' is not assignable to type '"param"'
}
游乐场