Типы Generi c в интерфейсе для типа функции - PullRequest
1 голос
/ 18 апреля 2020

При создании интерфейса для объекта параметров я пытаюсь разрешить пользователю указывать функцию с явным типом возвращаемого значения и типом аргумента c. Это возможно, если вы не определили тип для функции заранее, но я не могу понять, как это сделать для типа функции, который вы уже определили.

Например, это прекрасно работает :

interface Options {
  // Other options...
  converterFunction: <T>(rawData: T) => [];
}

Но это, похоже на разумный синтаксис, не помогает.

type ConverterFunction<T> = (rawData: T) => [];

interface Options {
  // Other options...
  converterFunction: <T>ConverterFunction<T>; // TypeScript is unhappy
}

Создание общего интерфейса c не решит мою проблему, и я бы нравится использовать мои предопределенные типы вместо их произвольного переопределения.

1 Ответ

0 голосов
/ 18 апреля 2020

Тип, который использует другой тип generi c, должен либо передавать конкретный тип, либо быть самим generi c.

И <T>Type<T> не является допустимым синтаксисом.

type ConverterFunction<T> = (rawData: T) => [];

interface Options<T> {
  converterFunction: ConverterFunction<T>; // TypeScript is happy
}

const options: Options<string> = {
  converterFunction(aString) {
    return []
  }
}

Детская площадка


Если тип не назван, вы можете определить функцию с помощью универсального параметра c, но если он назван Кажется, это невозможно. Я спрашиваю, так ли это на самом деле

Все зависит от того, на каком уровне вы хотите, чтобы generi c прошел.

Если вы знаете это на Если вы используете тип, то он переходит к типу.

type ConverterFunction<T> = (rawData: T) => T[];
const fn: ConverterFunction<string> = a => [a]
fn('a') // ['a']

Или, если вы хотите, чтобы тип generi c определялся самой функцией, поместите его в функцию.

type ConverterFunction = <T>(rawData: T) => T[];
const fn: ConverterFunction = (a: string) => [a]
fn('a') // ['a']

После прочтения ваших комментариев звучит так, как будто вы хотите этот второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...