제가 TypeScript 함수로 만든 라이브러리를 만들었어요.
15145 단어 TypeScript
동기
우선 예를 들어 메일 주소와 비밀번호를 입력하는 로그인 기능을 고려한다.그것은 아마 아래와 같이 쓸 수 있을 것이다.
import { pipe } from 'fp-minimal';
const login = pipe(validate, getToken, responseToState, redirect)
이렇게 하면 소함수validate
, getToken
, responseToState
, redirect
제작 기능을 조합할 때 가독성을 높일 수 있다.개요
fp-minimal
API는 pipe
및 curry
뿐이며 크기도 약 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);
}
curryexport 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화된 함수로 새로운 함수를 만들 때
끝내다
작은 부품을 이동 소프트웨어에 연결하는 것은 매우 즐겁다.
Reference
이 문제에 관하여(제가 TypeScript 함수로 만든 라이브러리를 만들었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okmttdhr/items/ff7f3a6514439a5a58f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)