Home > Mobile >  How can I conditionally add several values to a type?
How can I conditionally add several values to a type?

Time:11-11

I have this type:

export type SupportedSourceLanguages =
  | LanguageISOCode.En
  | LanguageISOCode.Es
  | LanguageISOCode.Pt
  | LanguageISOCode.De
  | LanguageISOCode.Ko
  | LanguageISOCode.It;

I don't want those last two to be in the type when a condition is met. How can I conditionally add those last two values only when the condition is met?

This was my approach (but it's not working):

const environment = 'production'; 

type LiveSupportedSourceLanguages =
  | LanguageISOCode.En
  | LanguageISOCode.Es
  | LanguageISOCode.Pt
  | LanguageISOCode.De;

type DevSupportedSourceLanguages =
  | LanguageISOCode.Ko
  | LanguageISOCode.It;

export type SupportedSourceLanguages = LiveSupportedSourceLanguages extends environment === 'production' ? DevSupportedSourceLanguages : never;

CodePudding user response:

You need to check if const's type extends 'production':

export type SupportedSourceLanguages = typeof environment extends 'production' 
  ? LiveSupportedSourceLanguages 
  : DevSupportedSourceLanguages;

Playground

  • Related