天天看點

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}));

繼續閱讀