Typescript: generi c функциональный тип / интерфейс для функции стрелки - PullRequest
2 голосов
/ 23 апреля 2020

Хорошо, у меня есть следующий сценарий:

type IHashFn = (arg: string) => number;
const hash: IHashFn = (arg) => {
  return 42;
}

Пока все хорошо. Теперь я хочу, чтобы функция была обобщенной c.

const hash: <T> (arg: T) => number = (arg) => {
  return 42;
}

Это работает. Но это не так:

type IHashFn<T> = (arg: T) => number;
const hash: <T> IHashFn<T> = (arg) => {
  return 42;
}

Я не нашел способа успокоить компилятор TS. Использование интерфейсов вместо псевдонимов типов также не работает.

Примечание: я не хочу, чтобы hash была реализацией для IHashFn<string>, но также generic c.

Есть ли способ объявить универсальные c типы функций или интерфейсы в TypeScript вообще?

Ответы [ 2 ]

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

Вы можете просто использовать IHashFn<any>. Это можно будет использовать там, где ожидается IHashFn<string>.

Если вы действительно хотите, чтобы он все еще был универсальным c типом функции, вы можете сделать что-то вроде этого:

type IHashFn<T = any> = <U extends T>(arg: U) => number;
0 голосов
/ 23 апреля 2020

Вы ничего не делаете с вашим параметром generi c.

Но звучит так, будто вам нужна функция generi c, а не псевдоним типа generi c. Так что оставьте это в функции и выключите псевдоним типа.

type IHashFn = <T>(arg: T) => number;

const hash: IHashFn = (arg) => {
  return 42;
}
...