小编McP*_*ott的帖子

替换通用接口类型参数

我正在尝试为函子映射创建一个通用的函数接口,该接口尊重所提供的接口。在下面显示的代码中,我希望value mb的类型Maybe<number>为type ,而不是实际的type Functor<number>

我确实意识到,一种可能的解决方案是向接口添加重载FMap。我对此解决方案不满意的原因是,我希望将此代码驻留在一个程序包中,从而允许用户创建实现Functor并具有我在使用函数时所描述的行为map

interface Functor<A> {
  map<B>(fn: (a: A) => B): Functor<B>;
}

interface FMap {
  <A, B>(fn: (a: A) => B, Fa: Functor<A>): Functor<B>;
}

const map: FMap = (fn, Fa) => (
  Fa.map(fn)
);

class Maybe<A> implements Functor<A> {
  constructor(private readonly a: A) {}
  map<B>(fn: (a: A) => B): Maybe<B> {
    return new Maybe<B>(fn(this.a));
  }
}


const sqr = (x: number) => x*x;
const ma = …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-generics

5
推荐指数
1
解决办法
134
查看次数

标签 统计

typescript ×1

typescript-generics ×1