Как заставить 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 шт):
Автор решения: Qwertiy
→ Ссылка
https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates
const isString = (x: any): x is string => typeof x === 'string'
