Typescript:声明并实现curried方法
在以下类的框架中Typescript:声明并实现curried方法,typescript,currying,Typescript,Currying,在以下类的框架中 class Iterable<A> { filter( filter: ( value: A ) => boolean ): Iterable<A> { ... } map<B>( f: ( value: A, index?: number ) => B ): Iterable<B> { ...} collect = <B>( filter: ( value: A ) =>
class Iterable<A> {
filter( filter: ( value: A ) => boolean ): Iterable<A> { ... }
map<B>( f: ( value: A, index?: number ) => B ): Iterable<B> { ...}
collect = <B>( filter: ( value: A ) => boolean ) => ( mapper: ( value: A ) => B ): Iterable<B> => { ... }
}
此属性基本上是一个curried函数,它将两个函数作为参数,并返回一个Iterable
。使用此
,作为一个可编辑的
,它可以以下列方式使用:
const it: Iterable<string> = this.collect<string>( f => true )( ( v: A ) => v.toString() )
是无效的
解决方案:(参见@JLRishe和@NitzanTomer answers)我选择了显式类型声明:
collect<B>(filter: (value: A) => boolean): (mapper: (value: A) => B) => Iterable<B> {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
collect(过滤器:(值:A)=>boolean):(映射器:(值:A)=>B)=>Iterable{
返回(映射器:(值:A)=>B)=>this.filter(filter.map)(映射器);
}
您可以这样实现它:
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
collect(过滤器:(值:A)=>boolean){
返回(映射器:(值:A)=>B)=>this.filter(filter.map)(映射器);
}
您可以这样实现它:
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
collect(过滤器:(值:A)=>boolean){
返回(映射器:(值:A)=>B)=>this.filter(filter.map)(映射器);
}
怎么样
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B): Iterable<B> => {
return this.filter(filter).map(mapper);
};
}
collect(过滤器:(值:A)=>boolean){
返回(映射器:(值:A)=>B):Iterable=>{
返回此.filter(filter).map(mapper);
};
}
怎么样
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B): Iterable<B> => {
return this.filter(filter).map(mapper);
};
}
collect(过滤器:(值:A)=>boolean){
返回(映射器:(值:A)=>B):Iterable=>{
返回此.filter(filter).map(mapper);
};
}
您也可以为您的班级输入代码吗?例如,这个A
是什么,这个.filter返回什么?etc..@NitzanTomerA
是一个泛型,请参见我在上面的编辑以及类的框架。您也可以为您的类添加代码吗?例如,这个A
是什么,这个.filter返回什么?etc..@NitzanTomerA
是一个泛型,请参见我上面的编辑和类的框架谢谢。与JLRishe相同的解决方案。。。谁在时钟上打败了你(根据SO)谢谢。与JLRishe相同的解决方案。。。谁在时钟上打败了你(根据SO)
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B): Iterable<B> => {
return this.filter(filter).map(mapper);
};
}