TypeScriptとreduceはあまり相性がよくない?

reduceを使った以下のコードがある。

type T1 = 'aaa' | 'bbb' | 'ccc'
const arr: T1[] = ['aaa', 'bbb', 'ccc']

const result = arr.reduce((acc, v) => {
    return {...acc, [v]: 0}
}, {})

result の型は {} と推論される。

期待した型にする場合は、アサーションを使わないといけない。

type T1 = 'aaa' | 'bbb' | 'ccc'
const arr: T1[] = ['aaa', 'bbb', 'ccc']

const result = arr.reduce((acc, v) => {
    return {...acc, [v]: 0}
}, {} as {[k in T1]: 0})