typescript 打字稿中的镜头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript 打字稿中的镜头相关的知识,希望对你有一定的参考价值。


export interface Lens<T, V> {
    get(o: T): V;
    set(v: V, o: T): T;
}

export const identity = <T>(): Lens<T, T> => identityLens

const identityLens = ({
    get: (o) => o,
    set: (v, o) => v
})

export const property = <T, K extends keyof T>(k: K): Lens<T, T[K]> => ({
    get: (o: T): T[K] => o[k],
    set: (v: T[K], o: T): T => ({ ...o as any, [k]: v })
})

export const properties = <T>(): { [K in keyof T]: Lens<T, T[K]> } => propertiesProxy

const propertiesProxy = new Proxy(null, {
    get(o, k) { return property(k as string); }
});

export const compose = <A, B, C>(x: Lens<A, B>, y: Lens<B, C>): Lens<A, C> => ({
  get: (a: A) => y.get(x.get(a)),
  set: (c: C, a: A) => {
    const b: B = x.get(a);
    const b2: B = y.set(c, b);
    return x.set(b2, a);
  }
});

type inner = { x: number };
const x = property<inner, "x">("x");

type outer = { y: inner };
const y = property<outer, "y">("y");

const u = x.get({x:4})

const u2 = compose(y, x);

const innerLens = properties<inner>()

const u3 = compose(properties<outer>().y, properties<inner>().x)

以上是关于typescript 打字稿中的镜头的主要内容,如果未能解决你的问题,请参考以下文章

typescript 打字稿中的字符类

typescript 打字稿中的一些类

typescript 打字稿中的角度转换日期格式

typescript kotlin在打字稿中的风格代表

打字稿中的多个构造函数

用打字稿中的子文档描述猫鼬模型