pipe()
pipe<
A>(a):A
pipe<
A,B>(a,ab):B
pipe<
A,B,C>(a,ab,bc):C
pipe<
A,B,C,D>(a,ab,bc,cd):D
Show 16 more signatures
pipe<
A,B,C,D,E>(a,ab,bc,cd,de):E
pipe<
A,B,C,D,E,F>(a,ab,bc,cd,de,ef):F
pipe<
A,B,C,D,E,F,G>(a,ab,bc,cd,de,ef,fg):G
pipe<
A,B,C,D,E,F,G,H>(a,ab,bc,cd,de,ef,fg,gh):H
pipe<
A,B,C,D,E,F,G,H,I>(a,ab,bc,cd,de,ef,fg,gh,hi):I
pipe<
A,B,C,D,E,F,G,H,I,J>(a,ab,bc,cd,de,ef,fg,gh,hi,ij):J
pipe<
A,B,C,D,E,F,G,H,I,J,K>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk):K
pipe<
A,B,C,D,E,F,G,H,I,J,K,L>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl):L
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm):M
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn):N
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no):O
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no,op):P
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no,op,pq):Q
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no,op,pq,qr):R
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no,op,pq,qr,rs):S
pipe<
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T>(a,ab,bc,cd,de,ef,fg,gh,hi,ij,jk,kl,lm,mn,no,op,pq,qr,rs,st):T
Composes functions left-to-right, passing the result of each to the next.
Supports up to 20 functions with full type inference.
Type Parametersβ
A: Aβ
The type of the initial value.
B: Bβ
C: Cβ
D: Dβ
E: Eβ
F: Fβ
G: Gβ
H: Hβ
I: Iβ
J: Jβ
K: Kβ
L: Lβ
M: Mβ
N: Nβ
O: Oβ
P: Pβ
Q: Qβ
R: Rβ
S: Sβ
T: Tβ
Parametersβ
Overload 1:
a: Aβ
The initial value to transform.
Overload 2:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
Overload 3:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
Overload 4:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
Show 16 more overloads
Overload 5:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
Overload 6:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
Overload 7:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
Overload 8:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
Overload 9:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
Overload 10:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
Overload 11:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
Overload 12:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
Overload 13:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
Overload 14:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
Overload 15:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
Overload 16:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
op: (o) => Pβ
Overload 17:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
op: (o) => Pβ
pq: (p) => Qβ
Overload 18:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
op: (o) => Pβ
pq: (p) => Qβ
qr: (q) => Rβ
Overload 19:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
op: (o) => Pβ
pq: (p) => Qβ
qr: (q) => Rβ
rs: (r) => Sβ
Overload 20:
a: Aβ
The initial value to transform.
ab: (a) => Bβ
bc: (b) => Cβ
cd: (c) => Dβ
de: (d) => Eβ
ef: (e) => Fβ
fg: (f) => Gβ
gh: (g) => Hβ
hi: (h) => Iβ
ij: (i) => Jβ
jk: (j) => Kβ
kl: (k) => Lβ
lm: (l) => Mβ
mn: (m) => Nβ
no: (n) => Oβ
op: (o) => Pβ
pq: (p) => Qβ
qr: (q) => Rβ
rs: (r) => Sβ
st: (s) => Tβ
Returns: Aβ
The result of applying all transformations.
Sinceβ
2.0.0
Performanceβ
Inline execution for 0-5 functions (~2x faster), loop for 6+.
Also known asβ
chain (Radashi) Β· flow (Lodash, es-toolkit) Β· pipe (Remeda, Ramda, Effect) Β· β (Modern Dash, Antfu)
Exampleβ
pipe(5, (x) => x * 2, (x) => x + 1);
// => 11
pipe(
'hello',
(s) => s.toUpperCase(),
(s) => s.split(''),
(arr) => arr.reverse(),
(arr) => arr.join('')
);
// => 'OLLEH'
How it works?β
Composes functions left-to-right, passing each result to the next function.
Step-by-Stepβ
String Transformation Exampleβ
pipe vs flowRightβ
| pipe | flowRight | |
|---|---|---|
| Direction | Left β Right | Right β Left |
| First arg | Initial value | Last function |
| Mental model | Data flows through | Math composition |
Use Casesβ
Function composition and chaining πβ
Pass a value through multiple functions in a readable left-to-right manner. Essential for functional programming and clean data processing workflows.
const add = (n: number) => n + 1;
const double = (n: number) => n * 2;
const square = (n: number) => n * n;
const result = pipe(2, add, double, square);
// pipe(2, add, double, square) β add(2)=3 β double(3)=6 β square(6)=36
// => 36
Data transformation pipelinesβ
Transform data through multiple steps with type-safe function chaining. Essential for complex data processing and ETL operations.
const slug = pipe(
" Hello World ",
(s) => s.trim(),
(s) => s.toLowerCase(),
(s) => s.replace(/\s+/g, "-"),
);
// => "hello-world"
Process API response through a full pipelineβ
Chain parse, normalize, and filter steps into a single readable pipeline. The real-world pattern developers write daily when consuming API data.
const response = await fetch("/api/users");
const data = await response.json();
const activeUsers = pipe(
data.users as User[],
(users) => users.filter((u) => u.isActive),
(users) => users.map((u) => ({ id: u.id, name: u.name, email: u.email })),
);
// Raw array β filtered active β picked fields
Build an SEO slug from a titleβ
Chain deburr, lowercase, and cleanup into a single slug generator. Essential for CMS platforms and blog engines generating URL-friendly slugs.
const slug = pipe(
"CafΓ© RΓ©sumΓ© β ΓtΓ© 2025",
(s) => deburr(s),
(s) => s.toLowerCase(),
(s) => s.replace(/[^a-z0-9\s]/g, ""),
(s) => s.trim().replace(/\s+/g, "-"),
);
// => "cafe-resume-ete-2025"
Process form submission through validation and sanitizationβ
Chain sanitization and transformation steps for form data. Critical for secure form handling with clear, composable steps.
const clean = pipe(
{ name: " Alice ", email: " Alice@Mail.COM ", message: "<b>Hello</b>" },
(data) => ({
...data,
email: data.email.toLowerCase().trim(),
name: data.name.trim(),
}),
(data) => {
if (!data.email.includes("@")) throw new Error("Invalid email");
return data;
},
(data) => ({
...data,
message: escape(data.message),
}),
);
// => { name: "Alice", email: "alice@mail.com", message: "<b>Hello</b>" }