funções – Para que serve definir o tipo de um argumento em uma função no python?

Eu imaginava que definir previamente o tipo do argumento em uma função no python fazia com que, automaticamente, o programa retornasse um TypeError caso o usuário adicionasse um argumento com tipagem diferente daquela esperada pela função.

No entanto, notei que adicionar o tipo do objeto não muda o comportamento da função nesse aspecto (e parece que não muda nada, na verdade).

Exemplo:

def user_sum(L:list):
    if len(L)==1:
        return L(0)
    else:
        return L(0)+user_sum(L(1:))

print(user_sum(15))

Retorna:

Traceback (most recent call last):
  File "/home/lucas/projects/frontends/recursion/sum_rec.py", line 7, in <module>
    print(user_sum(15))
  File "/home/lucas/projects/frontends/recursion/sum_rec.py", line 2, in user_sum
    if len(L)==1:
TypeError: object of type 'int' has no len()

Esse é exatamente o mesmo erro que retornaria caso não tivesse especificado o tipo de objeto. Sendo assim, para que serve definir previamente o tipo do argumento em uma função?