Тип guard, который утверждает, что все остальные параметры не являются неопределенными - PullRequest
0 голосов
/ 31 октября 2019

Можно ли создать определяемый пользователем тип защиты, который позволит компилятору знать, что все переданные ему аргументы определены?

Я хотел бы сделать что-то вроде этого:

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

Я хотел бы использовать это, чтобы я мог передать набор аргументов, которые потенциально не определены, обрабатывать то, что происходит, если они не определены, и в противном случае передавать их методу, который требует значения, не являются неопределенными.

Это может выглядеть так:

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

Когда я пробую наивную версию выше, компилятор говорит мне:

предикат типа не может ссылаться на параметр rest

Итак, я предполагаю, что это невозможно. Но я решил спросить, прежде чем сдаться.

Спасибо!

...