Где же ты дичи-то этой начитался? Где ты этому научился?

Во-первых, у тебя Spalte вообще отсутствует в исходных данных. У тебя data имеет тип Array<{test: number}>. Где ты там Spalte нашел, вообще не ясно.
Во-вторых, нафига объект приводить к строке, чтобы его обратно распарсить в объект и пытаться из него что-то получить? Даже если ты пытался на самом деле получить не Spalte, а тест, то твой код превращается вот в такое:

Все. Никаких stringify и parse.

В-третьих, какое это отношение имеет к объекту timer?

Ты так и не ответил на главный вопрос: что является сутью затраченного времени и как его вычислить? Отвечаю: затраченное время - это разнича между стартом таймера и остановом его. То есть дельта Конечного времени и Начального. Это, наверно, первые классы средней школы. Так вот, что в объекте таймера является начальным и конечным временем? Отвечаю:

- Начальное время - свойство createdAt
- Конечное время - свойство stopedAt

То есть для того, чтобы рассчитать затраченное время, достаточно было вычесть большее из меньшего, то есть
const diff = timer.stopedAt - timer.createdAt;
Все! Вот тебе разница в миллисекундах (то есть в тысячных секунды).

Единственное, вот если ты так прям напишешь, то TS ругнется на то, что stopedAt может отсутствовать. Это и логично. Ведь текущий таймер, пока не остановлен, не имеет значения stopedAt. Оно появится когда его остановят. То есть конечный подсчет будет выглядеть так:
const diff = (timer.stopedAt || new Date()) - timer.createdAt;
То есть если время останова отсутствует, указываем текущее время актуальное, таким образом даже в текущем таймере мы посчитаем сколько времени затрачено конкретно на текущий момент.

Все. И diff будет иметь тип number, и его можно присваивать к totalTime. Что здесь не ясно? Как можно было усложнить такую простую задачу?

{moment .utc(moment(timer.stopedAt).diff(moment(timer.createdAt))) .format('HH:mm:ss')}
Хоть здесь и используются moment(), суть от этого не меняется. Все равно высчитывается разность этих двух полей.