так, чтобы она возвращала true/false и при этом так же кидала ворнинг, если результат выражения — false?
Хочу использовать её так:
if (assert(typeof value === "string")) {
console.log(value.toUpperCase());
}
Сейчас TS не даёт использовать функцию внутри if-а:
https://codesandbox.io/s/suspicious-wescoff-8qo1uh?file=/src/index.ts
так у вас ваш assert ничего не возвращает...
Возвращать значения из такой функции TS тоже не даёт. Говорит результат должен быть void.
Функция в рантайме всегда возвращает undefined, поэтому проверять в if не имеет особого смысла
Да. Но мне ещё нужно чтобы при каждой такой проверке был ворнинг в консоли ещё. Не хочется в каждом if-е дублировать эти ворнинги.
function isString(thing: unknown): thing is string { if (typeof thing === "string") { return true } else { console.warn(...) return false } }
Ну тут конкретно проверка на string. А у меня куча всяких проверок может быть. Нужен универсальный assert(), который бы работал с true/false.
О, это уже ближе) Можно прямо на ходу объявлять проверки. Правда, всё равно слегка многословно получается, но всё равно прикольно) Спс. if (assert((x): x is string => typeof x === 'number')(value)) { console.log(value.toUpperCase()); } if (assert((x): x is Date => x instanceof Date)(value)) { console.log(value.toISOString()); } if (assert((x: any): x is AxiosError => 'isAxiosError' in x)(value)) { console.log(value.response); }
Обсуждают сегодня