我的函数接受参数 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 接口(interface)不是运行时工件,因此如果不定义某种包含您正在检查的所有键的对象,您将无能为力。
考虑到这一点,我会做这样的事情:
const MeTemplate: IMe = {
id: '',
isActive: false,
...
};
然后您的 isFull
函数将如下所示:
function isFull(obj) {
return Object.keys(MeTemplate).every(prop => prop in obj);
}
您需要定义两次 IMe
的键是不太理想的,但这可以通过为 MeTemplate
分配一种 IMe
来缓解.这确保如果您更改 IMe
的形状,您将遇到编译器错误,直到您也更改 MeTemplate
。
关于typescript - 确保部分在运行时是完整的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103876/