File: variance.types

package info (click to toggle)
node-typescript 5.0.4%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 459,140 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (59 lines) | stat: -rw-r--r-- 1,369 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/conformance/types/conditional/variance.ts ===
// Test cases for parameter variances affected by conditional types.

// Repro from #30047

interface Foo<T> {
  prop: T extends unknown ? true : false;
>prop : T extends unknown ? true : false
>true : true
>false : false
}

const foo = { prop: true } as const;
>foo : { readonly prop: true; }
>{ prop: true } as const : { readonly prop: true; }
>{ prop: true } : { readonly prop: true; }
>prop : true
>true : true

const x: Foo<1> = foo;
>x : Foo<1>
>foo : { readonly prop: true; }

const y: Foo<number> = foo;
>y : Foo<number>
>foo : { readonly prop: true; }

const z: Foo<number> = x;
>z : Foo<number>
>x : Foo<1>


// Repro from #30118

class Bar<T extends string> {
>Bar : Bar<T>

  private static instance: Bar<string>[] = [];
>instance : Bar<string>[]
>[] : never[]

  cast(_name: ([T] extends [string] ? string : string)) { }
>cast : (_name: ([T] extends [string] ? string : string)) => void
>_name : [T] extends [string] ? string : string
  
  pushThis() {
>pushThis : () => void

    Bar.instance.push(this);
>Bar.instance.push(this) : number
>Bar.instance.push : (...items: Bar<string>[]) => number
>Bar.instance : Bar<string>[]
>Bar : typeof Bar
>instance : Bar<string>[]
>push : (...items: Bar<string>[]) => number
>this : this
  }
}