Pesquisa de site

javascript - Typescript reconhece parâmetro de função condicional como tipo união


Estou tentando criar uma função com parâmetros condicionais. Onde, com base no primeiro parâmetro, o segundo parâmetro será alterado. Mas o TypeScript não está verificando o tipo correto automaticamente dentro de um bloco condicional. Como posso fazer isso?

Playground do Typescript

Aqui está meu código:

type User = {
  name: string
}

type Animal = {
  species: string
}

function get<T extends 'user' | 'animal'>(modelType: T, model: T extends 'user' ? User : Animal) {
  if (modelType === 'user') {
    model.name // Property 'name' does not exist on type 'User | Animal'.     
  } else {
    model.species // Property 'species' does not exist on type 'User | Animal'.
  }
}

Se verificar se o tipo é 'user', o TypeScript deve reconhecer que o modelo é User, de acordo com o tipo condicional