Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

276
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!