제가 TypeScript 함수로 만든 라이브러리를 만들었어요.

15145 단어 TypeScript
제목과 같이 fp-minimal 라는 라이브러리를 만들었습니다.

동기


우선 예를 들어 메일 주소와 비밀번호를 입력하는 로그인 기능을 고려한다.그것은 아마 아래와 같이 쓸 수 있을 것이다.
import { pipe } from 'fp-minimal';

const login = pipe(validate, getToken, responseToState, redirect)
이렇게 하면 소함수validate, getToken, responseToState, redirect 제작 기능을 조합할 때 가독성을 높일 수 있다.

개요

fp-minimal API는 pipecurry 뿐이며 크기도 약 1.6KB입니다.
(만들지 않았다compose 보호하기 위해서였다minimal.
Ramda 같은 라이브러리에 넣으면 모두 Ramda로 방법을 생각해 보고 상황에 따라 효율이 떨어지는 코드를 쓸 수 있습니다.작은 함수만 간단하게 조합해서 프로그램을 만들고 싶다면 이 API만으로도 충분하다.

실시


아주 작아서 코드의 내용을 소개해 드리겠습니다.
pipe
export function pipe(...args: Function[]): any {
  // reduceRightにするとcomposeになる
  return (input: any) => args.reduce((result, next) => next(result), input);
}
curry
export function curry(func: Function) {
  return function curried(...args: any[]) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args2: any[]) {
        return curried.apply(this, args.concat(args2));
      };
    }
  };
}
형은 역기...
export function curry<T1, R1>(func: (a: T1) => R1): (a: T1) => R1;
export function curry<T1, T2, R1>(func: (a: T1, b: T2) => R1): (a: T1) => (b: T2) => R1;
export function curry<T1, T2, T3, R1>(func: (a: T1, b: T2, c: T3) => R1): (a: T1) => (b: T2) => (c: T3) => R1;
export function curry<T1, T2, T3, T4, R1>(func: (a: T1, b: T2, c: T3, d: T4) => R1): (a: T1) => (b: T2) => (c: T3) => (d: T4) => R1;
export function curry<T1, T2, T3, T4, T5, R1>(func: (a: T1, b: T2, c: T3, d: T4, e: T5) => R1): (a: T1) => (b: T2) => (c: T3) => (d: T4) => (e: T5) => R1;

사용 예


사용할 때는 이렇게 합니다.
import { pipe } from 'fp-minimal';

const double = (x: number) => x * 2;
const addOne = (x: number) => x + 1;
const square = (x: number) => x * x;

pipe(double, addOne, square)(2) // 25
import { curry } from 'fp-minimal';

const add = (x: number, y: number) => x + y;
const addOne = curry(add)(1);

addOne(2); // 3
[1, 2, 3].map(addOne); // [2, 3, 4]
유형도 추론된다.

값의 유형 변화를 되돌릴 때

curry

curry화된 함수로 새로운 함수를 만들 때

끝내다


작은 부품을 이동 소프트웨어에 연결하는 것은 매우 즐겁다.
  • Support proposed ES Next "|>" pipeline operator · Issue #17718 · microsoft/TypeScript
  • TypeScript도 pipeline operator(반환)입니다.
  • 좋은 웹페이지 즐겨찾기