Infer тип возврата функции родного брата - PullRequest
0 голосов
/ 03 октября 2018

Я хочу иметь возможность сделать это:

  const columns: ColumnDefinition<Pair>[] = [
    { label: 'Pair', value: pair => (all ? pair.code : pair.second.code), format: result => result.toUpperCase() },
    { label: 'Price', numeric: true, value: pair => 0 },
    { label: 'Change', numeric: true, value: pair => 0 },
  ];

и чтобы TS знал, что параметр pair для value имеет тип Pair и параметр result для format имеет тип string (pair.code является string).Все, что вернет value, будет отдано format.Тип возвращаемого значения value может отличаться в разных определениях столбцов.

Пока это мой тип:

export type ColumnDefinition<T, F extends (item: T) => unknown> = {
  label?: string;
  numeric?: boolean;
  value: F;
  format?: (value: ReturnType<F>) => string;
};

, но я получаю сообщение об ошибке:

Общий тип 'ColumnDefinition' требует 2 аргументов типа.

1 Ответ

0 голосов
/ 03 октября 2018

extends является только частью определения типа.Если вы хотите опционально опустить универсальный тип, вам нужно установить значение по умолчанию, используя =:

export type ColumnDefinition<T, F extends (item: T) => unknown = (item: T) => unknown> = {
...