天天看点

Angular NgRx MemoizedSelector的类型定义学习

源代码位置:

Angular NgRx MemoizedSelector的类型定义学习
Angular NgRx MemoizedSelector的类型定义学习
MemoizedSelector包含两部分属性:

  1. extends Selector

Selector的定义:一个函数,输入参数类型为State,返回参数类型为Result,

因此,MemorizedSelector,首先它也是一个函数。

Angular NgRx MemoizedSelector的类型定义学习
Angular NgRx MemoizedSelector的类型定义学习

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

export type MemoizedProjection = {

   memoized: AnyFn;

   reset: () => void;

   setResult: (result?: any) => void;

   clearResult: () => void;

};

export type MemoizeFn = (t: AnyFn) => MemoizedProjection;

export type ComparatorFn = (a: any, b: any) => boolean;

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

export declare type Selector = (state: T) => V;

export interface MemoizedSelector

DefaultProjectorFn> extends Selector {

   release(): void;

   projector: ProjectorFn;

   setResult: (result?: Result) => void;

}

export interface JerryState {

   name: string,

   age: number

let jerryProjector = (data: string) => data.length;

let jerryOriginFn = (data: JerryState) => data.name.length;

let jerrySelector: MemoizedSelector>;

let oExtended = {

   release: () => {},

   projector: jerryProjector,

   setResult: (data: number) => {},

   clearResult: () => {}

jerrySelector = Object.assign(jerryOriginFn, oExtended);

console.log('Ethan', jerrySelector({ name: 'Jerry', age: 31}));

继续阅读