断言所有其余参数均未定义的类型保护

D. *_*ick 10 typescript typeguards

是否可以创建一个用户定义的类型保护,让编译器知道传递给它的所有参数都已定义?

我想做这样的事情:

  public static all(...values: unknown[]): values is object[] {
    return values.every(value => typeof(value) !== 'undefined');
  }
Run Code Online (Sandbox Code Playgroud)

我想使用它,以便我可以传递一组可能未定义的参数,处理它们未定义时发生的情况,否则将它们传递给需要值不是未定义的方法。

这可能看起来像这样:

    if (!ParamHelper.all(id, ...dateParts)) { return []; }
    const date = new Date(dateParts.join('-'));
    const result = await this.service.getData(assetId, date);
Run Code Online (Sandbox Code Playgroud)

当我尝试上面的简单版本时,编译器告诉我:

类型谓词不能引用剩余参数

所以,我目前认为这是不可能完成的。但是,我想在放弃之前我应该​​问一下。

谢谢!