在函数类型中使用泛型

时间:2019-01-14 21:20:35

标签: typescript

我想使用泛型为函数创建一个接口,以便该函数接受两个参数,并返回第一个参数的类型或两者的并集。我以为可以做这样的事情:

declare interface CustomMerge {
  (x: Partial<T1>, y: Partial<T1 | T2>): T1 | T1 & T2;
}

但是我在这里遇到关于意外符号的各种错误,所以我怀疑到目前为止我所做的事情还差得很远。打字稿可以吗?

1 个答案:

答案 0 :(得分:2)

您必须先声明type variables,然后才能在包括函数签名在内的任何地方使用它们。为此,您有两个选择:

在方法级别上声明

declare interface CustomMerge {
   <T1, T2>(x: Partial<T1>, y: Partial<T1 | T2>): T1 | T1 & T2;
// ^^^^^^^^
}

在界面级别上声明

declare interface CustomMerge<T1, T2> {
//                           ^^^^^^^^
  (x: Partial<T1>, y: Partial<T1 | T2>): T1 | T1 & T2;
}