Use Union Types

Use Union Types

Don’t write overloads that differ by type in only one argument position:

/* WRONG */
interface Moment {
  utcOffset(): number;
  utcOffset(b: number): Moment;
  utcOffset(b: string): Moment;
}

Do use union types whenver possible:

/* OK */
interface Moment {
  utcOffset(): number;
  utcOffset(b: number|string): Moment;
}

Note that we didn’t make b optional here because the return types of the signatures differ.

Why: This is important for people who are “passing through” a value to your function:

function fn(x: string): void;
function fn(x: number): void;
function fn(x: number|string) {
  // When written with separate overloads, incorrectly an error
  // When written with union types, correctly OK
  return moment().utcOffset(x);
}
doc_TypeScript
2016-10-04 19:25:42
Comments
Leave a Comment

Please login to continue.