typescript - 确保部分在运行时是完整的

标签 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 接口(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/

相关文章:

angular - 文件删除上传数据传输为空Angular 2

angular2-multiselect-dropdown 在下拉列表中显示 id 和 itemName

javascript - TS2403 : Subsequent variable declarations must have the same type in react

javascript - 单击 div Angular 时打开新选项卡

typescript - 具有流输入和输出的 Azure 文本转语音

TypeScript 将对象从具有可选属性的类型转换为不具有可选属性的类型

typescript - 角 9 : How to remove empty option from select

typescript - typescript 中枚举的通用函数

html - Angular2 - 填充组合框/下拉列表

javascript - 将 javascript 页面级变量传递到捆绑的 Angular2 RC 1 应用程序中