Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 19x 19x 19x 1x 5x 2x 9x 10x | import * as Rx from 'rxjs/operators'; import { OperatorFunction } from 'rxjs'; import { AC, Action } from '../types'; import { isAction, getACType } from '../utils'; export type OfType = { <T extends AC>(ac: T): OperatorFunction<Action, ReturnType<T>>; <T extends AC, T2 extends AC>(ac: [T, T2]): OperatorFunction< Action, ReturnType<T> | ReturnType<T2> >; <T extends AC, T2 extends AC, T3 extends AC>( ac: [T, T2, T3] ): OperatorFunction<Action, ReturnType<T> | ReturnType<T2> | ReturnType<T3>>; <T extends AC, T2 extends AC, T3 extends AC, T4 extends AC>( ac: [T, T2, T3, T4] ): OperatorFunction< Action, ReturnType<T> | ReturnType<T2> | ReturnType<T3> | ReturnType<T4> >; <T extends AC, T2 extends AC, T3 extends AC, T4 extends AC, T5 extends AC>( ac: [T, T2, T3, T4, T5] ): OperatorFunction< Action, | ReturnType<T> | ReturnType<T2> | ReturnType<T3> | ReturnType<T4> | ReturnType<T5> >; < T extends AC, T2 extends AC, T3 extends AC, T4 extends AC, T5 extends AC, T6 extends AC >( ac: [T, T2, T3, T4, T5, T6] ): OperatorFunction< Action, | ReturnType<T> | ReturnType<T2> | ReturnType<T3> | ReturnType<T4> | ReturnType<T5> | ReturnType<T6> >; }; function compare(ac: AC, action: Action) { Iif (!isAction(action)) { return false; } const [symbol, type] = getACType(ac); return symbol === action.type[0] && type === action.type[1]; } export const ofType: OfType = (ac: AC | AC[]) => { if (Array.isArray(ac)) { return Rx.filter((action: any) => ac.some(item => compare(item, action)) ) as any; } return Rx.filter((action: any) => compare(ac, action)) as any; }; |