javascript - 函数表达式的流通用类型(箭头函数)

标签 javascript generics flowtype arrow-functions parameterized-types

我通常会尝试将流函数类型与其实现分开。当我写的时候,它的可读性稍微好一点:

type Fn = string => string;
const aFn: Fn = name => `hello, ${ name }`;

而不是:

const aFn = (name: string): string => `hello, ${ name }`;

当使用泛型类型时,我们可以这样写:

const j= <T>(i: T): T => i;

const jString: string = j('apple'); // √
const jNumber: number = j(7);       // √

但是我怎样才能将这种类型与函数表达式分开呢?

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

*应该使用什么? any 可以,但这不是我想要的。

在 haskell 中这不是问题:

identity :: a -> a
identity a = a

identity "a-string" // √
identity 666        // √

参见 flow.org/try

最佳答案

所以我注意到如果我使用 bounded generics ,它将起作用:

type H<T> = <T: *>(input: T) => T;
const h:H<*> = i => i;

const a: string = h('apple');      // √
const b: number = h(7);            // √
const c: {} = h({ nane: 'jon' });  // √

不要问我为什么。

关于javascript - 函数表达式的流通用类型(箭头函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46596235/

相关文章:

javascript - 流量: Using custom array types in function response

javascript - 如何在同步 Javascript 中查找异步图像状态

java - 具有扩展多种类型的泛型参数的静态字段

generics - Kotlin 是否有等效于 C#'s "default"的关键字?

javascript - 流: is not a polymorphic type

javascript - Flow 适用于解构函数参数但不适用于非解构函数参数的场景

javascript - 通过 JavaScript 选择文本

javascript - WebActivities 在 Firefox OS 1.2 下的奇怪行为

javascript - 如何从 Firebase 访问项目对象数组

c# - 如何使用可比较的 C# 比较泛型中的字符串和整数