首页 > 解决方案 > 确保部分在运行时已满

问题描述

我的函数接受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

解决方案


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


推荐阅读