typescript - 如何對篩選 Object.entries 進行型別保護?
我希望有像 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"
)
如何使用類型守衛來解決這個問題?
答案#1
我傾向於這樣定義 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],就像我假設你想要的那樣。
希望那有幫助;祝你好運!
程式碼的 Playground 連結
