typescript

Make second argument of a function optional or required, based on the first argument type


How to make data arg optional only if cat argument is not 1 ?

export class MyClass<T extends 1 | 2 | 3>{
  constructor(
    public cat: T,
    public data?: T extends 1 ? string[] : undefined,
  ) {
    ...
  }
}

Solution

  • You could go with overloads.

    export class MyClass<T extends 1 | 2 | 3> {
      constructor(cat: 1, data: string[]);
      constructor(cat: Exclude<T, 1>);
      constructor(
        public cat: T,
        public data?: string[],
      ) {
        ...
      }
    }
    

    Playground