typescript - 确保部分在运行时已满
问题描述
我的函数接受meOrPartial
输入为Partial<IMe> | IMe
. 在我的函数体中,我需要检测它是否“满”,有没有办法在运行时做到这一点?
我试过这个伪代码(IMe 有比这更多的键):
interface IMe {
id: string;
isActive: boolean;
}
function (meOrPartial: Partial<IMe> | IMe) {
const meKeys = keyof IMe;
// const meKeys = K in IMe;
const isFull = Object.keys(meKeys).every(key => meOrPartial.hasOwnProperty(key));
}
当然这不起作用,但是有没有办法在运行时进行检查?
解决方案
TypeScript 接口不是运行时工件,因此如果不定义某种包含您正在检查的所有键的对象,您将无能为力。
考虑到这一点,我会做这样的事情:
const MeTemplate: IMe = {
id: '',
isActive: false,
...
};
然后你的isFull
函数看起来像这样:
function isFull(obj) {
return Object.keys(MeTemplate).every(prop => prop in obj);
}
您需要定义两次的键并不理想,IMe
但是通过分配MeTemplate
. IMe
这样可以确保如果您更改 的形状IMe
,您将遇到编译器错误,直到您也更改为止MeTemplate
。
推荐阅读
- excel - 分析和更新动态表宏 VBA
- regex - 正则表达式匹配括号和逗号之间的字符串,但存在多个括号
- python - Pytorch GPU 内存分配
- jenkins - Jenkins 传递 Active Choices 参数的值
- javascript - React-Bootstrap-Table-Next 搜索栏 onSearch 不是函数
- java - 从 Java ArrayList http 响应转换为 javaobj Python 对象/列表的问题
- machine-learning - Keras 多标签图像分类。我是否正确传递了我的数据?我是否正确预处理?
- git - Subgit --authors-file 未映射,在 git 中 authors.txt 为空
- java - Java 8 Streams map 与 peek
- python - np.nan 的字符串等价物是什么?