tipo genérico de fluxo para expressão de função (funções de seta)
Normalmente, tento manter os tipos de função de fluxo separados de sua implementação. É um pouco mais legível quando escrevo:
type Fn = string => string;
const aFn: Fn = name => `hello, ${ name }`;
ao invés de:
const aFn = (name: string): string => `hello, ${ name }`;
Ao usar tipos genéricos, podemos escrever:
const j= <T>(i: T): T => i;
const jString: string = j('apple'); // √
const jNumber: number = j(7); // √
Mas como posso separar esse tipo de uma expressão de função?
type H<T> = (input: T) => T;
const h:H<*> = i => i; // --> WHAT SHOULD GO FOR '*'?
const hString: string = h('apple'); // X error
const hNumber: number = h(7); // X error
Para que deve ser utilizado*
? any
funcionaria, mas não é isso que eu quero.
No haskell, isso não é problema:
identity :: a -> a
identity a = a
identity "a-string" // √
identity 666 // √
Vejoflow.org/try