TypeScript выдаст ошибку («Выражение типа «void» не может быть проверено на истинность.ts(1345)») с допустимым кодом отладки, например:
const getFooPlusTwo = (foo) => console.info(foo) || foo + 2;
Существуют различные приемы, позволяющие обойти это (добавление +, , и т. д.), но они работают не при всех обстоятельствах... и, что более важно, это ненужная работа, не приносящая никакой пользы (JS прекрасно работает без них).
Большинство правил TypeScript можно отключить. Есть ли какое-либо правило TypeScript (или ESLint), которое я могу отключить, чтобы TypeScript не выдавал эти ошибки?
Я пытаюсь отладить. Исходная версия функции выглядела так:const getFooPlusTwo = (foo) => foo + 2;. Я использовал (очень распространенный) шаблон отладки, добавив console.info(foo) || , чтобы определить значение аргумента foo. Выглядит, конечно, некрасиво, но и не предполагается: это отладочный код.
Вы можете дополнить глобальную консоль, заменив там void на undefined — это звучит более эргономично, чем оператор запятая с круглыми скобками. declare global { interface Console { log(msg: any, ...args: any[]): undefined; } }
Это звучит как ответ! К сожалению, я первым увидел ответ Джоша, но если вы предоставите это как ответ, я с радостью проголосую за него и изменю свой принятый ответ (если ТАК позволит мне).






Вы не сможете отключить это правило машинописного текста, console.info возвращает void, и вы не можете использовать выражение void при проверке правдивости.
Альтернативным вариантом может быть использование оператора запятой для разделения журнала и возврата значения. Оператор запятая оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
export const getFooPlusTwo = (foo: number) => (console.info(foo), foo + 2);
Это прискорбно: во многих случаях запятая не работает (и опять же, у разработчиков должна быть хотя бы возможность игнорировать ошибки, которые TypeScript создает из ничего). Но спасибо за ответ!
Вы можете расширить глобальный объект консоли, чтобы его методы возвращали undefined вместо void. Это безопасно, поскольку console.info действительно возвращается undefined безоговорочно. Вот это (здесь вы также можете добавить другие консольные методы):
declare global {
interface Console {
log(msg: any, ...args: any[]): undefined;
}
}
const getFooPlusTwo = (foo: string) => console.info(foo) || foo + 2;
Ссылка на игровую площадку (прочитайте это, чтобы понять declare global, она вам, скорее всего, понадобится, но не на детской площадке).
Это не позволит вообще использовать void в таких логических цепочках, и это, наверное, хорошо: если вы принимаете обратный вызов, возвращающий void, вы можете случайно использовать его в callback() || 'something' и разочароваться, когда этот обратный вызов вернется 1.
function test(callback: () => void) {
return callback() || 'something'
}
test(() => 1)
«Выражение типа «void» не может быть проверено на истинность» — это единственная ошибка, выдаваемая машинописным текстом для приведенного выше фрагмента, поэтому его отключение действительно может привести к принятию неработающего кода.
Это не очень читабельно. Почему то, что ты пытаешься сделать?