Skip to content

Commit e466afe

Browse files
authoredMar 6, 2024··
Added Either and Option type extractors (#2255)
1 parent 89b5d1c commit e466afe

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed
 

‎.changeset/odd-bikes-flow.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"effect": patch
3+
---
4+
5+
added Either.Either.{Left,Right} and Option.Option.Value type utils

‎packages/effect/dtslint/Either.ts

+6
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,9 @@ pipe(
165165
_s: string
166166
) => "b" as const)
167167
)
168+
169+
// $ExpectType number
170+
export type R = Either.Either.Right<typeof string$number>
171+
172+
// $ExpectType string
173+
export type L = Either.Either.Left<typeof string$number>

‎packages/effect/dtslint/Option.ts

+3
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,6 @@ numberOrString.pipe(Option.andThen(numberOrString))
195195

196196
// $ExpectType Option<string | number>
197197
numberOrString.pipe(Option.andThen(() => numberOrString))
198+
199+
// $ExpectType string | number
200+
export type V = Option.Option.Value<typeof numberOrString>

‎packages/effect/src/Either.ts

+16
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ export interface EitherTypeLambda extends TypeLambda {
9090
readonly type: Either<this["Target"], this["Out1"]>
9191
}
9292

93+
/**
94+
* @since 2.0.0
95+
*/
96+
export declare namespace Either {
97+
/**
98+
* @since 2.0.0
99+
* @category type-level
100+
*/
101+
export type Left<T extends Either<any, any>> = [T] extends [Either<infer _A, infer _E>] ? _E : never
102+
/**
103+
* @since 2.0.0
104+
* @category type-level
105+
*/
106+
export type Right<T extends Either<any, any>> = [T] extends [Either<infer _A, infer _E>] ? _A : never
107+
}
108+
93109
/**
94110
* Constructs a new `Either` holding a `Right` value. This usually represents a successful value due to the right bias
95111
* of this structure.

‎packages/effect/src/Option.ts

+11
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ export interface OptionUnify<A extends { [Unify.typeSymbol]?: any }> {
7575
Option?: () => A[Unify.typeSymbol] extends Option<infer A0> | infer _ ? Option<A0> : never
7676
}
7777

78+
/**
79+
* @since 2.0.0
80+
*/
81+
export declare namespace Option {
82+
/**
83+
* @since 2.0.0
84+
* @category type-level
85+
*/
86+
export type Value<T extends Option<any>> = [T] extends [Option<infer _A>] ? _A : never
87+
}
88+
7889
/**
7990
* @category models
8091
* @since 2.0.0

0 commit comments

Comments
 (0)
Please sign in to comment.