File: arrayFrom.errors.txt

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (48 lines) | stat: -rw-r--r-- 2,102 bytes parent folder | download | duplicates (5)
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
tests/cases/compiler/arrayFrom.ts(20,7): error TS2322: Type 'A[]' is not assignable to type 'B[]'.
  Property 'b' is missing in type 'A' but required in type 'B'.
tests/cases/compiler/arrayFrom.ts(23,7): error TS2322: Type 'A[]' is not assignable to type 'B[]'.


==== tests/cases/compiler/arrayFrom.ts (2 errors) ====
    // Tests fix for #20432, ensures Array.from accepts all valid inputs
    // Also tests for #19682
    
    interface A {
      a: string;
    }
    
    interface B {
      b: string;
    }
    
    const inputA: A[] = [];
    const inputB: B[] = [];
    const inputALike: ArrayLike<A> = { length: 0 };
    const inputARand = getEither(inputA, inputALike);
    const inputASet = new Set<A>();
    
    const result1: A[] = Array.from(inputA);
    const result2: A[] = Array.from(inputA.values());
    const result3: B[] = Array.from(inputA.values()); // expect error
          ~~~~~~~
!!! error TS2322: Type 'A[]' is not assignable to type 'B[]'.
!!! error TS2322:   Property 'b' is missing in type 'A' but required in type 'B'.
!!! related TS2728 tests/cases/compiler/arrayFrom.ts:9:3: 'b' is declared here.
    const result4: A[] = Array.from(inputB, ({ b }): A => ({ a: b }));
    const result5: A[] = Array.from(inputALike);
    const result6: B[] = Array.from(inputALike); // expect error
          ~~~~~~~
!!! error TS2322: Type 'A[]' is not assignable to type 'B[]'.
    const result7: B[] = Array.from(inputALike, ({ a }): B => ({ b: a }));
    const result8: A[] = Array.from(inputARand);
    const result9: B[] = Array.from(inputARand, ({ a }): B => ({ b: a }));
    const result10: A[] = Array.from(new Set<A>());
    const result11: B[] = Array.from(inputASet, ({ a }): B => ({ b: a }));
    
    // if this is written inline, the compiler seems to infer
    // the ?: as always taking the false branch, narrowing to ArrayLike<T>,
    // even when the type is written as : Iterable<T>|ArrayLike<T>
    function getEither<T> (in1: Iterable<T>, in2: ArrayLike<T>) {
      return Math.random() > 0.5 ? in1 : in2;
    }