Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

278
Vistas
Typescipt evaluates conditional types incorrectly

I have a very primitive code that for some reason gives a type error.

type ConfigEntry = {
  name?: string,
  value?: string
}

function parser1(c: ConfigEntry): Record<string, string> {
  const name = c.name;
  const value = c.value;
  return { name: value }; // fine, error since name can be undefined
}

function parser2(c: ConfigEntry): Record<string, string> | undefined {
  const name = c.name;
  const value = c.value;
  if (name === undefined) return undefined;
  else return { name: value }; // compiler still argues that name can be undefined
  // but in any circumstances it is not
}

If I understand TS correctly, compiler should examine conditions and evaluate types accordingly.

Also none of the other conditional expressions known to me work as well.

Example is here

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

You are only doing null check for name, while you should be doing it for value instead.

function parser2(c: ConfigEntry): Record<string, string> | undefined {
  const name = c.name; // <--- This line is not needed since we are not doing anything with `name`
  const value = c.value;
  if (value === undefined) return undefined; // <--- Should check `value` here. `name` is not needed because it is unused.
  else return { name: value };
}
about 4 years ago · Juan Pablo Isaza Denunciar

0

You are checking that name is undefined. However here

return { name: value };

What you are really using is the value variable. The only thing you need to change is checking that value is undefined:

if (value === undefined) return undefined;
else return { name: value };
about 4 years ago · Juan Pablo Isaza Denunciar

0

What lead me to confusion is that because of a typo (name vs [name]) TS was highlighting key, not value, that actually had an error
enter image description here
So the correct code will be fixing the typo and specifying the return value as

Record<string, string | undefined>

function parser4(c: ConfigEntry): Record<string, string | undefined> | undefined {
  const name = c.name;
  const value = c.value;
  return name ? { [name]: value } : undefined;
}

Thank you all for the help.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda