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"
)
如何使用 typeguard 解决这个问题?
解决方案
我倾向于这样定义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])[] */
并且您看到返回的数组类型具有 type 的元素["name", string] | ["age", number]
,正如我假设您想要的那样。
希望有帮助;祝你好运!
推荐阅读
- python - Windows 10 上的 Jupyterlab 中的代码自动完成失败
- java - 如何从 docker 和本地连接到 docker-compose 端口?
- azure - Microsoft azure 广告如何生成 cookie?
- bash - mkvirtualenv --python 命令行参数记录在哪里?
- python - 如何解决错误:未创建 XLA 设备 - tensorflow?
- flutter - [Android studio]- 配置Flutter和dart sdk路径后,当我点击应用时,它只是擦除了我输入的路径
- java - 如何在 Java 中创建并行 HTTP GET 请求
- symfony - sh:symfony-cmd:找不到命令
- html - 我的 html 项目中的自动播放有问题
- java - 通过arraylist对hashmap进行排序
价值观