Ngrx Store实现源代码的MemoizedSelector学习笔记
生活随笔
收集整理的這篇文章主要介紹了
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:
下圖29行,尖括號里的T不能換成any. any不能出現在類型參數的位置里。如果表示任意類型,不出現在類型參數的位置,可以用any.
Generic type ‘MemoizedSelector<State, Result, ProjectorFn>’ requires between 2 and 3 type arguments.
interface里添加method:
看個Spartacus的例子:一個函數除了本身的實現之外,還多了4個屬性,分別指向4個另外的函數:
memoizedProjector構造完畢:
通過下面這個方法構造的:
Object.assign. 該方法會把輸入參數的各個對象的屬性做一個合并:
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Ngrx Store实现源代码的MemoizedSelector学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音火山版怎么绑定qq
- 下一篇: 英雄联盟LCL是哪个赛区 LCL赛区是哪