我有一个联合类型,其中包含一个包含不同属性的子对象。有没有办法在函数中接受这个联合并以打字稿安全的方式迭代它的子对象的键?
// TYPES
type A = {
bools: {
a: boolean;
b: boolean;
};
};
type B = {
bools: {
b: boolean;
c: boolean;
};
};
type U = A | B;
// ATTEMPTED TYPING
type GetKeyGroups<T> = T extends T ? Array<keyof T> : never;
type keygroups = GetKeyGroups<U['bools']>
// WANTED USE
const a: A = {
bools: {
a: false,
b: false,
},
};
const test = ( obj: U ) => {
const bools: U["bools"] = obj.bools
const keys = Object.keys(bools) as keygroups
keys.forEach((key) => console.log(bools[ key ]));
}
test(a)
这个 ^ 似乎是一个很好的解决方案,直到打字稿抱怨 key
在 keys.forEach((key) => console.log(bools[ key ]));
中属于 any 类型
有没有办法在当前版本的 TypeScript 中实现这一点?
答案 0 :(得分:0)
当然。这样的事情应该可以工作
const test = ( obj: U ) => {
const bools: U["bools"] = obj.bools
const keys = Object.keys(bools) as (keyof typeof bools)[]
keys.forEach((key) => console.log(bools[key]));
}