Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 管道约束逆变函数_Typescript_Generics_Typescript Generics_Contravariance_Function Composition - Fatal编程技术网

Typescript 管道约束逆变函数

Typescript 管道约束逆变函数,typescript,generics,typescript-generics,contravariance,function-composition,Typescript,Generics,Typescript Generics,Contravariance,Function Composition,目标是构造一个管道函数,使用尽可能少的类型声明,将管道限制为比最初指定的派生类型少的类型(相反) 看来建造这样的管道是可能的。下面的场景 接口任务{ ():承诺; } 声明const initialValue:Task; 声明const firstLine:(ma:Task)=>Task; declare const secondLine:(ma:Task)=>Task;//工作 declare const secondLineProblem:()=>Task;//编译错误 类型PipedFun

目标是构造一个管道函数,使用尽可能少的类型声明,将管道限制为比最初指定的派生类型少的类型(相反)

看来建造这样的管道是可能的。下面的场景

接口任务{
():承诺;
}
声明const initialValue:Task;
声明const firstLine:(ma:Task)=>Task;
declare const secondLine:(ma:Task)=>Task;//工作
declare const secondLineProblem:()=>Task;//编译错误
类型PipedFunc=((
a:a型
)=>结果)扩展(b:any)=>any
? AtualType扩展了ExpectedType
? (b:AtualType)=>结果
: [
“函数与预期签名不匹配:”,
(b:ExpectedType)=>结果
]
:从不;
管道类型={
(a):a;
(a:a,ab:(a:a)=>B:B;
(a:a,ab:(a:a)=>B,bc:PipedFunc):C;
(a:a,ab:(a:a)=>B,bc:PipedFunc,cd:PipedFunc):D;
};
导出常量管道:管道=函数(
a:不知道,
ab?:功能,
bc?:功能,
cd?:功能,
):未知{
开关(arguments.length){
案例1:
返回a;
案例2:
返回ab!(a);
案例3:
返回bc!(ab!(a));
案例4:
返回cd!(bc!(ab!(a));
}
返回;
};
让task01=管道(初始值、第一行、第二行、第二行);
让task02=管道(初始值、第一行、第二行、第二行问题);//预期的编译错误
//                                                     ↑
//编译错误-类型为“()=>Task”的参数不能分配给类型为的参数
//“[”函数与预期的签名不匹配:,(b:Task)=>Task]”。ts(2345)
但是这种方法使得使用o类型声明成为必要

sum00=pipe(10,firstValue=>firstValue+1,(secondValue:number)=>secondValue);//作品
我们的目标是找到一种方法来推断下面seconds参数的类型。不使用类型声明

sum00=pipe(10,firstValue=>firstValue+1,secondValue=>secondValue);//不起作用
//                                                 ↑
//编译错误-参数“value”隐式具有“any”类型。ts(7006)
可能吗?它正在考虑使用某种条件类型来推断
SecondValue
的类型,但不可能得出正确的示例

有没有什么方法可以在TypeScript中找到这个解决方案