Pesquisa de site

Como usar enum do Typescript como parâmetro de função?


Estou tendo dificuldades em obter segurança de tipo ao usar enum como parâmetros de função. Por exemplo, usando o código de exemplo na documentação de Enum do TS:

enum UserResponse {
  No = 0,
  Yes = 1,
}

function respond(recipient: string, message: UserResponse): void {
  console.log(recipient, message)
}

respond("Princess Caroline", UserResponse.Yes);

respond("Princess Caroline", 'some other message'); // Argument of type '"some other message"' is not assignable to parameter of type 'UserResponse'.

respond("Princess Caroline", 5); // No error...
  • Por que o compilador não está dando erros ao usar o valor 5, que não está definido em UserResponse?
  • Como posso melhorar as tipagens para que o parâmetro message aceite SOMENTE UserResponse.Yes | UserResponse.No?
  • Devo usar alguma outra estrutura de dados para armazenar UserResponse?

Resposta #1

Infelizmente, esta pergunta é um duplicado. No entanto, isso significa que já existe uma resposta: https://stackoverflow.com/a/49169301/12425097 - Parece que suas melhores opções são usar um enum de string ou uma união de tipo de namespace, que é demonstrada na resposta vinculada.