In Effect-TS, various mapping functions can be applied to the values inside an Option to transform, replace, or manipulate the contained values. This article explores different mapping functions provided by Effect-TS with practical examples.
Use O.map to apply a transformation function to the value inside an Option. If the Option is Some, the function is applied; otherwise, the result is None.
import { Option as O, pipe } from 'effect'; function mapping_ex01() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const increment = (n: number) => n + 1; console.log(pipe(some, O.map(increment))); // Output: Some(2) (since some contains 1 and 1 + 1 = 2) console.log(pipe(none, O.map(increment))); // Output: None (since none is None) }
Use O.as to replace the value inside the Option with a provided constant value.
import { Option as O, pipe } from 'effect'; function mapping_ex02() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value console.log(pipe(some, O.as('replaced'))); // Output: Some('replaced') (replaces 1 with 'replaced') console.log(pipe(none, O.as('replaced'))); // Output: None (since none is None) }
The output is Some('replaced') for the some Option and None for the none Option, demonstrating how O.as effectively replaces the original value if it exists.
Use O.asVoid to replace the value inside the Option with undefined.
import { Option as O, pipe } from 'effect'; function mapping_ex03() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value console.log(pipe(some, O.asVoid)); // Output: Some(undefined) (replaces 1 with undefined) console.log(pipe(none, O.asVoid)); // Output: None (since none is None) }
Explanation:
The output is Some(undefined) for the some Option and None for the none Option, demonstrating how O.asVoid effectively replaces the original value if it exists.
Use O.flatMap to apply a transformation function that returns an Option to the value if the Option is Some, and flatten the result.
import { Option as O, pipe } from 'effect'; function mapping_ex04() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const doubleIfPositive = (n: number) => (n > 0 ? O.some(n * 2) : O.none()); console.log(pipe(some, O.flatMap(doubleIfPositive))); // Output: Some(2) (since some contains 1 and 1 > 0) console.log(pipe(none, O.flatMap(doubleIfPositive))); // Output: None (since none is None) }
The output is Some(2) for the some Option and None for the none Option, demonstrating how O.flatMap flattens the result of the transformation.
Use O.flatMapNullable to apply a transformation function that may return a nullable value to the value if the Option is Some, and convert the result to an Option.
import { Option as O, pipe } from 'effect'; function mapping_ex05() { const some = O.some({ a: { b: { c: 1 } } }); // Create an Option containing a nested object const none = O.none(); // Create an Option representing no value const getCValue = (obj: { a?: { b?: { c?: number } } }) => obj.a?.b?.c ?? null; console.log(pipe(some, O.flatMapNullable(getCValue))); // Output: Some(1) (extracts the nested value) console.log(pipe(none, O.flatMapNullable(getCValue))); // Output: None (since none is None) }
The output is Some(1) for the some Option and None for the none Option, demonstrating how O.flatMapNullable converts the result of the transformation to an Option.
The above is the detailed content of Mapping Operations in Effect-TS Optionals. For more information, please follow other related articles on the PHP Chinese website!