打字稿:声明和实现柯里化方法
Typescript: declaring and implementing a curried Method
在下面的骨架中class
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> => { ... }
}
有一个咖喱 属性 collect
是这样实现的
collect = <B>( filter: ( value: A ) => boolean ) => ( mapper: ( value: A ) => B ): Iterable<B> => {
return this.filter( filter ).map( mapper )
}
这个 属性 基本上是一个柯里化函数,它将两个函数作为参数并且 return 是一个 Iterable<B>
。对于 this
,作为 Iterable<A>
,可以按以下方式使用:
const it: Iterable<string> = this.collect<string>( f => true )( ( v: A ) => v.toString() )
现在,我想将此 属性 转换为 class 方法 但我找不到正确的语法
声明
collect<B>( filter: ( value: A ) => boolean ): ( mapper: ( value: A ) => B ) => Iterable<B>
将保留其用法(参见上文 it
),但是我不知道如何实现它,因为该方法期望 return 一个 Function
,而不是 [=22] =]
声明
collect<B>( filter: ( value: A ) => boolean ) => ( mapper: ( value: A ) => B ) : Iterable<B>
无效...
解决方案:(参见@JLRishe 和@NitzanTomer 的回答)我进行了显式类型声明:
collect<B>(filter: (value: A) => boolean): (mapper: (value: A) => B) => Iterable<B> {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
你可以这样实现:
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
怎么样
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B): Iterable<B> => {
return this.filter(filter).map(mapper);
};
}
在下面的骨架中class
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> => { ... }
}
有一个咖喱 属性 collect
是这样实现的
collect = <B>( filter: ( value: A ) => boolean ) => ( mapper: ( value: A ) => B ): Iterable<B> => {
return this.filter( filter ).map( mapper )
}
这个 属性 基本上是一个柯里化函数,它将两个函数作为参数并且 return 是一个 Iterable<B>
。对于 this
,作为 Iterable<A>
,可以按以下方式使用:
const it: Iterable<string> = this.collect<string>( f => true )( ( v: A ) => v.toString() )
现在,我想将此 属性 转换为 class 方法 但我找不到正确的语法
声明
collect<B>( filter: ( value: A ) => boolean ): ( mapper: ( value: A ) => B ) => Iterable<B>
将保留其用法(参见上文
it
),但是我不知道如何实现它,因为该方法期望 return 一个Function
,而不是 [=22] =]声明
collect<B>( filter: ( value: A ) => boolean ) => ( mapper: ( value: A ) => B ) : Iterable<B>
无效...
解决方案:(参见@JLRishe 和@NitzanTomer 的回答)我进行了显式类型声明:
collect<B>(filter: (value: A) => boolean): (mapper: (value: A) => B) => Iterable<B> {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
你可以这样实现:
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B) => this.filter(filter).map(mapper);
}
怎么样
collect<B>(filter: (value: A) => boolean) {
return (mapper: (value: A) => B): Iterable<B> => {
return this.filter(filter).map(mapper);
};
}