A tiny TypeScript Either helper for values that can go one of two ways:
Right(value)means the computation worked.Left(value)means it did not.
Think of it as a civilized alternative to throwing errors across the room.
npm i @smidhonza/eitherimport { Either, Left, Right, isLeft } from '@smidhonza/either';
type ParseError = {
message: string;
};
const parsePort = (input: string): Either<ParseError, number> => {
const port = Number(input);
if (!Number.isInteger(port)) {
return Left({ message: `"${input}" is not a whole number` });
}
if (port < 1 || port > 65535) {
return Left({ message: `${port} is not a valid port` });
}
return Right(port);
};
const result = parsePort('3000');
if (isLeft(result)) {
console.error(result.value.message);
} else {
console.log(`Server ready on port ${result.value}`);
}Output:
Server ready on port 3000Try parsePort('banana') and it will politely hand you a Left instead of turning your call stack into a crime scene.
A union type representing either a left value or a right value.
type Result = Either<Error, string>;Creates a left value. Use it for errors, missing data, invalid input, or any branch where the answer is "not today".
const result = Left('User not found');Creates a right value. Use it for successful results.
const result = Right({ id: 1, name: 'Ada' });Checks whether an Either is a Left, while narrowing the TypeScript type.
if (isLeft(result)) {
console.log(result.value);
}Checks whether an Either is a Right, while narrowing the TypeScript type.
if (isRight(result)) {
console.log(result.value);
}Build the package:
npm run buildISC