File: simplifyingConditionalWithInteriorConditionalIsRelated.types

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (59 lines) | stat: -rw-r--r-- 1,702 bytes parent folder | download | duplicates (3)
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
59
=== tests/cases/compiler/simplifyingConditionalWithInteriorConditionalIsRelated.ts ===
// from https://github.com/microsoft/TypeScript/issues/30706
type ConditionalType<T> = T extends string ? string : number;
>ConditionalType : ConditionalType<T>

function ConditionalOrUndefined<T>(): ConditionalType<T> | undefined {
>ConditionalOrUndefined : <T>() => ConditionalType<T> | undefined

    return 0 as any;
>0 as any : any
>0 : 0
}

function JustConditional<T>(): ConditionalType<T> {
>JustConditional : <T>() => ConditionalType<T>

    return ConditionalOrUndefined<T>()!; // shouldn't error
>ConditionalOrUndefined<T>()! : ConditionalType<T>
>ConditionalOrUndefined<T>() : ConditionalType<T> | undefined
>ConditionalOrUndefined : <T>() => ConditionalType<T> | undefined
}


// For comparison...
function genericOrUndefined<T>(): T | undefined {
>genericOrUndefined : <T>() => T | undefined

    return 0 as any;
>0 as any : any
>0 : 0
}

function JustGeneric<T>(): T {
>JustGeneric : <T>() => T

    return genericOrUndefined<T>()!; // no error
>genericOrUndefined<T>()! : NonNullable<T>
>genericOrUndefined<T>() : T | undefined
>genericOrUndefined : <T>() => T | undefined
}

// Simplified example:

function f<T>() {
>f : <T>() => void

    type One = T extends string ? string : string;
>One : T extends string ? string : string

    type A = T extends number ? One : never;
>A : T extends number ? T extends string ? string : string : never

    const x: One = null as any as A;
>x : T extends string ? string : string
>null as any as A : T extends number ? T extends string ? string : string : never
>null as any : any
>null : null
}