Экран списка дел. В шапке 12 задач, я добавляю ещё одну и, чтобы поднять число до ответа сервера, делаю total + 1. В шапке теперь 121 задача. (На секунду показалось, что из ниоткуда взялась сотня дел.)
Причина такая. count(*) в PostgreSQL - это bigint, а драйвер pg для Node по умолчанию отдаёт bigint строкой, потому что в число JavaScript помещается не всякое 64-битное целое. А тип строки результата написан вручную.
type CountRow = { total: number };
const { rows } = await pool.query<CountRow>(
'SELECT count(*) AS total FROM todos WHERE done = false',
);
setTotal(rows[0].total + 1);
Тип говорит number, редактор молчит, а во время выполнения '12' + 1 - это склейка строк.
Вижу два способа. Привести тип в SQL через count(*)::int или разобрать значение в коде. Пока запросов немного, приведение выглядит проще. Где вы это обычно делаете?