Ngrx Store实现源代码的MemoizedSelector学习笔记

定义一个类型AnyFn,代表任意的函数:

  export type AnyFn = (...args: any[]) => any; 

  let a: AnyFn;

  a = (data) => console.log(data);

  a('Jerry');

  a = 1; // 语法错误

上面代码将1赋给a,会引起编译错误,因为1的类型是number.

定义一个MemoizedProjection类型:

export type MemoizedProjection = {
    memoized: AnyFn;
    reset: () => void;
    setResult: (result?: any) => void;
    clearResult: () => void;
};

定义一个变量,类型为MemoizedProjection:


let a: MemoizedProjection;

let b = (data) => console.log(data);

a.memoized = b;
a.reset = () => console.log('reset');
a.setResult = (result) => console.log(result);
a.clearResult = () => console.log('clear');

上述代码执行会报错误:

Uncaught TypeError: Cannot set property ‘memoized’ of undefined:

Ngrx Store实现源代码的MemoizedSelector学习笔记Ngrx Store实现源代码的MemoizedSelector学习笔记

下图29行,尖括号里的T不能换成any. any不能出现在类型参数的位置里。如果表示任意类型,不出现在类型参数的位置,可以用any.

Ngrx Store实现源代码的MemoizedSelector学习笔记



Generic type ‘MemoizedSelector’ requires between 2 and 3 type arguments.


Ngrx Store实现源代码的MemoizedSelector学习笔记


interface里添加method:


Ngrx Store实现源代码的MemoizedSelector学习笔记


看个Spartacus的例子:一个函数除了本身的实现之外,还多了4个属性,分别指向4个另外的函数:


Ngrx Store实现源代码的MemoizedSelector学习笔记


memoizedProjector构造完毕:


Ngrx Store实现源代码的MemoizedSelector学习笔记


通过下面这个方法构造的:


Object.assign. 该方法会把输入参数的各个对象的属性做一个合并:

Ngrx Store实现源代码的MemoizedSelector学习笔记




上一篇:深入解析 Flink 细粒度资源管理


下一篇:Linux 文件管理命令