Dessa maneira eu sou obrigado a usar o List.Item?

Se a única maneira de exportação é pelo List, sim.

Mas isso também é como exportar vários componentes e criar um index.ts para usar o seguinte:

export * as List from './List';
Mas dessa forma perderia o componente default do List, que é o Main. O que o Object.assign permite é ao mesmo tempo ter o default pra `List` sendo `Main` e também o valor `Item`. Caso fosse dessa forma com export sem o Object.assign, o uso do List seria ``.

Não, você pode usar só o List, nesse exemplo do artigo o seguinte código funcionaria sem o List.Item:

<List>
   <li>...</li>
</List>

Mas um ponto é que o código do <List.Item> estaria no bundle mesmo não sendo usado. Então essa abordagem é mais interessante para componetes em que você usa todas as opções em conjunto.