TypeScript中用于咖喱函数的类型推断

沃纳·德·格鲁特

对于TypeScript中的咖喱函数,我具有以下定义:

interface Curried2<A, B, Z> {
    (_0: A): (_0: B) => Z;
    (_0: A, _1: B): Z;
}

我有以下应该接受一个功能的功能(是否已咖喱):

function apply<T, U>(f: (_0: T) => U, x: T): U {
    return f(x);
}

现在,给定

let curried: Curried2<number, boolean, string> = ...

以下作品(预期):

apply<number, (_0: boolean) => string>(curried, 4);

但是TypeScript无法自行推断类型:

apply(curried, 4);

(即使只有一个重载()采用单个值。)它抱怨:

类型'Curried2 <number,boolean,string>'的参数不能分配给类型'(_0:number)=> string'的参数...
它已经正确地推断出了 T ,但可以推断出 U string 为什么是这样?在这种情况下,我该怎么做才能使类型推断起作用(因为已明确指定 T 并且 U 对于我的口味来说太冗长了)?

提前致谢!

刺眼的光芒

我可以尝试这种方法:

type Curried<T1, T2, T3> = (x: T1) => (y: T2) => T3;

function apply<T, U>(f: (value: T) => U, x: T): U {
    return f(x);
}

//simple demo
var someFunc: Curried<string, number, [string, number]> = x => y => [x, y];
var curriedSomeFunc = apply(someFunc, "string here");
var result1 = curriedSomeFunc(0); //will be ["string here", 0]
var result2 = curriedSomeFunc(1); //will be ["string here", 1]

再试一次。如果您传递的curry函数不正确,那么语法是正确的,但是没有安全性:

interface Curried<T1, T2, T3> {
    (x: T1, y: T2): T3;
    (x: T1): (y: T2) => T3
}

let f1 = <Curried<string, number, [string, number]>>
    ((x: string, y: number) => [x, 1]);
let f2 = <Curried<string, number, [string, number]>>
    ((x: string) => (y: number) => [x, y]);

function apply<T, V>(f: (x: T) => V, x: T): V {
    return f(x);
}

let curriedF1 = apply(f1, "42"); //Won't work (no function to curry) but type inference is OK
let curriedF2 = apply(f2, "11"); //Will work and type inference is also OK 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有咖喱函数的F#类型推断

来自分类Dev

JavaScript和ES6中用于咖喱函数的函数应用程序

来自分类Dev

从枚举参数推断Typescript函数返回类型

来自分类Dev

在TypeScript中推断通用函数类型

来自分类Dev

在F#中推断咖喱函数签名

来自分类Dev

Typescript泛型:从函数参数的类型推断类型?

来自分类Dev

TypeScript推断接受函数作为参数的函数的返回类型

来自分类Dev

Typescript推断高阶函数中内部函数的类型

来自分类Dev

如何使TypeScript类型推断适用于数组

来自分类Dev

TypeScript类型推断问题

来自分类Dev

TypeScript:错误的类型推断

来自分类Dev

TypeScript通用类型推断

来自分类Dev

为什么Typescript无法推断此函数的参数类型?

来自分类Dev

TypeScript返回确切的函数推断类型

来自分类Dev

TypeScript:从错误的参数推断出通用函数类型参数

来自分类Dev

为什么TypeScript无法推断递归函数的类型

来自分类Dev

如何找出C ++中用于OpenCV .at函数的类型?

来自分类Dev

函数文字的类型推断

来自分类Dev

与格式相关的类型的咖喱函数

来自分类Dev

函数类型的Scala类型推断

来自分类Dev

Typescript:如何推断字符串文字参数类型并将其用于其他参数类型

来自分类Dev

TypeScript泛型在进行咖喱处理时不适用于上一个函数,该怎么做?

来自分类Dev

TypeScript:推断通用密钥的类型

来自分类Dev

TypeScript无法推断诺言类型

来自分类Dev

TypeScript无法推断特定类型

来自分类Dev

从函数参数推断类型参数

来自分类Dev

类型构造函数参数推断

来自分类Dev

无法推断函数返回类型

来自分类Dev

(>>)(>>)的类型推断(函数组成)

Related 相关文章

热门标签

归档