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中找到这个解决方案