Как заставить TypeScript увидеть проверку на ненулевое значение, выполненную внутри функции?

  • Есть someFunction которая принимает значение типа string
  • props.value имеет тип null|undefined|string
  • чтобы проверить это дело есть удобный оператор !=.

props.value != null

Но я хочу вынести проверку в отдельную функцию, чтобы было так: isDefAndNotNull(props.value)

Но в этом случае TypeScript не видит проверку. Можно ли его заставить подтянуть типы? (оператор ! не подойдёт)


Ответы (1 шт):

Автор решения: ThisMan

В TS есть способ указать функцию, которая скажет TS, что переменная имеет конкретный тип.
Подробнее

function isDefAndNotNull<T>(test: undefined | null | T): test is T {
  return test !== null && test !== undefined;
}

function doSomething(data: string) {
  return data;
}

interface Data {
  test?: string;
}

const data: Data = {
  test: 'test',
}

doSomething(data.test); // тут плохо
if(isDefAndNotNull<string>(data.test)) {
  doSomething(data.test); // тут хорошо
}

Поиграться самому

→ Ссылка