exilonX
exilonX

Reputation: 1761

Chaining functions in typescript

I have some formatting functions that should be applied on some strings:

const limitSize = (limit: number): ((str: string) => string) => {
  return (str: string) => str.substring(0, limit)
}

const replaceNewLine = (replaceWith: string): ((str: string) => string) => {
  return (str: string) => str.replace(/\n/g, replaceWith)
}

They both return a function that can be applied on a string

How can I chain them together so that the result returns also a function that can be applied on strings?

Is there a lodash utility I'm missing?

Upvotes: 1

Views: 668

Answers (2)

Rich N
Rich N

Reputation: 9475

Just create a new function definition as below:

const limitReplace = (limit: number, replaceWith: string): ((str: string) => string) => {
    return str => replaceNewLine(replaceWith)(limitSize(limit)(str));
}

Used as:

const input = "Hel\nlo W\norld\n";
const limitSixReplaceSpace = limitReplace(6, " ");
const result = limitSixReplaceSpace(input); // Hel lo

Upvotes: 1

justerest
justerest

Reputation: 964

I think you need flow function of Lodash or pipe of Ramda

function square(n) {
  return n * n;
}
 
var addSquare = _.flow([_.add, square]);
addSquare(1, 2);
// => 9

Upvotes: 5

Related Questions