我定义了以下类型:
type MyType = <T>(a: string, b: Record<string, MyFunction<T>>) => T
type MyFunction<T> = () => T
我想创建另一个类型(MyType2
(,它采用相同的参数,但返回void
。
我不希望对两者使用相同的类型,并让它返回T | void
,因为一个函数必须返回T
,一个必须返回void
。
如何使用Typescript以DRY方式实现这一点?
我确信这是可能的,但我想不通。
您可以使用Parameters
助手和扩展语法来重用函数中的参数类型:
type MyType2 = (...args: Parameters<MyType>) => void
请注意,这将导致具有unknown
的函数类型,而不是具有类型参数的泛型函数类型:
(a: string, b: Record<string, MyFunction<unknown>>) => void
在这种特殊情况下,这可能无关紧要;我不确定是否有一种通用的方法可以输出另一个具有自己类型参数的泛型函数类型,但我怀疑没有,因为Typescript不支持更高级的类型。然而,有一种方法可以在不重复太多代码的情况下使这两个函数通用,方法是将参数单独定义为通用元组类型:
type MyParameters<T> = [a: string, b: Record<string, MyFunction<T>>]
type MyType = <T>(...args: MyParameters<T>) => T
type MyType2 = <T>(...args: MyParameters<T>) => void
游乐场链接