forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnarrowingUnionByUnionCandidate1.types
More file actions
58 lines (48 loc) · 1.62 KB
/
narrowingUnionByUnionCandidate1.types
File metadata and controls
58 lines (48 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//// [tests/cases/compiler/narrowingUnionByUnionCandidate1.ts] ////
=== narrowingUnionByUnionCandidate1.ts ===
// https://github.com/microsoft/TypeScript/issues/61581
type Result<A, E> =
>Result : Result<A, E>
> : ^^^^^^^^^^^^
| {
readonly _tag: "Ok";
>_tag : "Ok"
> : ^^^^
readonly value: A;
>value : A
> : ^
}
| {
readonly _tag: "Fail";
>_tag : "Fail"
> : ^^^^^^
readonly error: E;
>error : E
> : ^
};
declare const isResult: (u: unknown) => u is Result<any, any>;
>isResult : (u: unknown) => u is Result<any, any>
> : ^ ^^ ^^^^^
>u : unknown
> : ^^^^^^^
// return type: Result<A, E> | "ok"
export const fn = <A, E>(inp: Result<A, E> | string) =>
>fn : <A, E>(inp: Result<A, E> | string) => Result<A, E> | "ok"
> : ^ ^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^
><A, E>(inp: Result<A, E> | string) => isResult(inp) ? inp : "ok" : <A, E>(inp: Result<A, E> | string) => Result<A, E> | "ok"
> : ^ ^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^
>inp : string | Result<A, E>
> : ^^^^^^^^^^^^^^^^^^^^^
isResult(inp) ? inp : "ok";
>isResult(inp) ? inp : "ok" : Result<A, E> | "ok"
> : ^^^^^^^^^^^^^^^^^^^
>isResult(inp) : boolean
> : ^^^^^^^
>isResult : (u: unknown) => u is Result<any, any>
> : ^ ^^ ^^^^^
>inp : string | Result<A, E>
> : ^^^^^^^^^^^^^^^^^^^^^
>inp : Result<A, E>
> : ^^^^^^^^^^^^
>"ok" : "ok"
> : ^^^^