代码之家  ›  专栏  ›  技术社区  ›  Noitidart

确保部分在运行时已满

  •  0
  • Noitidart  · 技术社区  · 7 年前

    我的函数接受参数 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));
    
    }
    

    当然,这不起作用,但是有没有办法在运行时执行这个签入?

    0 回复  |  直到 7 年前
        1
  •  2
  •   Andrew Eisenberg    7 年前

    typescript接口不是运行时工件,因此如果不定义包含您正在检查的所有键的某种对象,您就无法完成很多工作。

    考虑到这一点,我会这样做:

    const MeTemplate: IMe = {
      id: '',
      isActive: false,
      ...
    };
    

    然后你的 isFull 函数如下所示:

    function isFull(obj) {
      return Object.keys(MeTemplate).every(prop => prop in obj);
    }
    

    你需要定义 IMe 两次,但通过分配 MeTemplate 一种 输入法 . 这样可以确保如果更改 输入法 ,您将有一个编译器错误,直到您还更改 计量 .

    推荐文章