【发布时间】:2020-02-27 00:56:20
【问题描述】:
我有这个类型定义
type FuncType<T> = (value: T) => T
我想使用这种类型实现一个函数,如下所示:
const myFunc: FuncType<T> = (value) => value;
并按如下方式使用:
const a: string = myFunc<string>('a');
const b: number = myFunc<number>(2);
但是,当然,上一行 const myFunc: FuncType<T> = (value) => value; 没有有效的语法。
应该怎么写?
注意: 我找到了一种使用中间函数的解决方法,但最好避免这种无用的柯里化(在我的实际用例中我无论如何都不能使用它,因为它与反应钩子和反应钩子不容忍柯里化):
const myFunc = <T>(): FuncType<T> => (value) => value;
const a: string = myFunc<string>()('a');
const b: number = myFunc<number>()(2);
为什么我需要使用这个类型别名,不能直接写?
const myFunc = <T>(value: T): T => value;
因为在我的真实用例中,我的函数的类型定义并不是那么简单。
看起来像这样:
interface FuncType<T> {
(args: {arg1: T}): {res1: T}
(args: {arg1: T, arg2: T}): {res1: T, res2: T}
}
【问题讨论】:
-
你真的需要类型别名吗?也许你可以
function myFunc<T>(value: T) : T { return value; } -
@AlekseyL。我更新了我的问题以回答你的问题。
-
问题是:你是否在多个地方使用该类型?如果是,请显示用例。否则我的建议仍然有效 - 根据需要添加尽可能多的重载
标签: typescript typescript-types