TypeScript - несколько утверждений - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь утверждать, что несколько значений не undefined, используя функцию asserts TypeScript. Хотя я могу утверждать одно значение, я не могу утверждать несколько значений одним утверждением. См. Ниже.

function assert1(a1: any): asserts a1 {
  if (a1 === undefined) throw new Error()
}
function assert2(a1: unknown, a2: unknown) {
  assert1(a1)
  assert1(a2)
}

const foo = () => Math.random() < 0.5 ? 4999 : undefined

const a = foo()
const b = foo()

assert1(a)
console.log(a + 10) // works as expected, no errors


assert2(a, b)
console.log(a + b) // const b: 4999 | undefined, Object is possibly 'undefined'.(2532)

Я провел довольно много времени с этим, но безрезультатно. Можно ли сделать эту работу? Или я должен придерживаться традиционного:

if (!a || !b || !c || !d ...) {
  throw ...
}

Спасибо за вашу помощь и понимание.

1 Ответ

0 голосов
/ 17 января 2020

Вместо того, чтобы утверждать одно единственное значение, вы также можете утверждать условия, которые являются истинными для остальной части объема (больше информации здесь ):

function assert(condition: any, msg?: string): asserts condition {
    if (!condition) throw new Error(msg)
}

const foo = () => Math.random() < 0.5 ? 4999 : undefined

const a = foo()
const b = foo()

assert(a !== undefined && b !== undefined) // assert a and b are defined

console.log(a + b) // works; a: 4999, b: 4999

Детская площадка образец

...