Как заставить TypeScript корректно проверять выражения?

Простой пример:

const isString = (any: any): boolean => (typeof any === 'string')

function something(foo: string | number): string {
  const value = isString(foo) ? foo : Number.prototype.toFixed.call(foo)
  // ... какие-то действия
  return value
}

После первой строки, внутри функции, тут же светятся ошибки. TypeScript не способен корректно обработать строку с кастомной isString(foo)- константа value, видится ему как string | number.

введите сюда описание изображения

Если же явно использовать typeof и написать так ...

function something(foo: string | number): string {
  const value = typeof foo === 'string' ? foo : Number.prototype.toFixed.call(foo)
  return value
}

... то const value: string и ошибок, соответственно, нет.

Принудительная установка типа...

/** @type {string} */
const value = ...

...также не помогает.

Не могу найти настройки конфига, где подобное поведение возможно исправить.


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