File: subtypingWithConstructSignaturesWithSpecializedSignatures.errors.txt

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 (99 lines) | stat: -rw-r--r-- 3,964 bytes parent folder | download | duplicates (4)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignaturesWithSpecializedSignatures.ts(70,15): error TS2430: Interface 'I2' incorrectly extends interface 'Base2'.
  The types returned by 'new a(...)' are incompatible between these types.
    Type 'string' is not assignable to type 'number'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignaturesWithSpecializedSignatures.ts(76,15): error TS2430: Interface 'I3' incorrectly extends interface 'Base2'.
  The types returned by 'new a2(...)' are incompatible between these types.
    Type 'string' is not assignable to type 'T'.
      'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.


==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithConstructSignaturesWithSpecializedSignatures.ts (2 errors) ====
    // same as subtypingWithCallSignatures but with additional specialized signatures that should not affect the results
    
    module CallSignature {
        interface Base { // T
            // M's
            new (x: 'a'): void;
            new (x: string, y: number): void;
        }
    
        // S's
        interface I extends Base {
            // N's
            new (x: 'a'): number; // ok because base returns void
            new (x: string, y: number): number; // ok because base returns void
            new <T>(x: T): string; // ok because base returns void
        }   
    
        interface Base2 { // T
            // M's
            new (x: 'a'): number;
            new (x: string): number;
        }
    
        // S's
        interface I2 extends Base2 {
            // N's
            new (x: 'a'): string;
            new (x: string): string; // error because base returns non-void;
        }
    
        // S's
        interface I3 extends Base2 {
            // N's
            new <T>(x: T): string; // ok, adds a new call signature
        }
    }
    
    module MemberWithCallSignature {
        interface Base { // T
            // M's
            a: {
                new (x: 'a'): void;
                new (x: string): void;
            }
            a2: {
                new (x: 'a', y: number): void;
                new (x: string, y: number): void;
            }
            a3: new <T>(x: T) => void;
        }
    
        // S's
        interface I extends Base {
            // N's
            a: new (x: string) => number; // ok because base returns void
            a2: new  (x: string, y: number) => boolean; // ok because base returns void
            a3: new <T>(x: T) => string; // ok because base returns void
        }
    
        interface Base2 { // T
            // M's
            a: {
                new (x: 'a'): number;
                new (x: string): number;
            }
            a2: new <T>(x: T) => T;
        }
    
        // S's
        interface I2 extends Base2 {
                  ~~
!!! error TS2430: Interface 'I2' incorrectly extends interface 'Base2'.
!!! error TS2430:   The types returned by 'new a(...)' are incompatible between these types.
!!! error TS2430:     Type 'string' is not assignable to type 'number'.
            // N's
            a: new (x: string) => string; // error because base returns non-void;
        }
    
        // S's
        interface I3 extends Base2 {
                  ~~
!!! error TS2430: Interface 'I3' incorrectly extends interface 'Base2'.
!!! error TS2430:   The types returned by 'new a2(...)' are incompatible between these types.
!!! error TS2430:     Type 'string' is not assignable to type 'T'.
!!! error TS2430:       'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.
            // N's
            a2: new <T>(x: T) => string; // error because base returns non-void;
        }
    }