我希望有entryof
这样的内容来保护这样的条目:
const carDude = {
name: "Tom",
age: 45,
car: "Porsche 911"
}
interface Dude {
name: string;
age: number;
}
Object
.entries(carDude)
.filter((entry): entry is entryof Dude =>
entry[0] === "name" || entry[0] === "age"
)
如何使用Typeguard解决该问题?
答案 0 :(得分:2)
我倾向于这样定义EntryOf
:
type EntryOf<T extends object> = { [K in keyof T]: [K, T[K]] }[keyof T];
这将采用对象类型T
,并将其变成条目元组的并集。然后您的代码可以写为
const ret = Object.entries(carDude).filter((entry): entry is EntryOf<Dude> =>
entry[0] === "name" || entry[0] === "age"
);
/* const ret: (["name", string] | ["age", number])[] */
,您会发现返回的数组类型具有["name", string] | ["age", number]
类型的元素,就像我想的那样。
希望有所帮助;祝你好运!