Typescript:用泛型(更高级类型)扩展类型的泛型

Typescript:用泛型(更高级类型)扩展类型的泛型,typescript,Typescript,假设我有一个接口 interface Applicative<T> {} 是我天真的尝试,但这是无效的这不完全是你想要的,但我认为你可以得到: interface Applicative<T> {} function f<U>(fn: Function, a: U & Applicative<any>): U & Applicative<Function> { return null; } 我不能完全确定

假设我有一个接口

interface Applicative<T> {}

是我天真的尝试,但这是无效的

这不完全是你想要的,但我认为你可以得到:

interface Applicative<T> {}

function f<U>(fn: Function, a: U & Applicative<any>): U & Applicative<Function> {

    return null;
}
我不能完全确定我的示例中的返回类型是否正是您想要的。但是,您应该能够通过在返回类型上添加/更改所需的接口来实现所需的结果,例如:

function f<U, V>(fn: Function, a: U & A<V>): U & A<Function>
function f<U, V>(fn: Function, a: U & A<V>): U & A<Function> & B<V>
函数f(fn:function,a:U&a):U&a
功能f(fn:功能,a:U&a):U&a&B

或者类似的东西

不幸的是,typescript(还没有)实现更高级的类型


有关详细信息,请参见

U也是通用的。恐怕您不能在泛型参数声明中声明泛型。也许这有帮助:“函数f(fn:function,a:U):U”。免责声明:我明白这不是你想要的。@TSV谢谢。这是可编译的,但由于
any | Function
any
一样好,因此此定义不能保证
f
返回一个U包装一个函数(其他什么都没有)另一个我的想法是“Function f(fn:Function,a:U):Applicative”-但这并没有给出所需的函数结果类型…@TSV;再次感谢,但这一次不能保证函数返回的类型是U类型(或从U派生的)-这是我的要求之一,就像合理的解决方法一样。让我测试一下,然后回到你身边
function f<U, V>(fn: Function, a: U & Applicative<V>): U & Applicative<Function> { }
function f<U, V>(fn: Function, a: U & A<V>): U & A<Function>
function f<U, V>(fn: Function, a: U & A<V>): U & A<Function> & B<V>