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
|
tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts(37,5): error TS2322: Type '"y"' is not assignable to type '"x"'.
tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts(60,5): error TS2322: Type 'string[]' is not assignable to type 'XY[]'.
Type 'string' is not assignable to type 'XY'.
==== tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts (2 errors) ====
function f1() {
let b = true;
let obj = { b };
// Desired: OK
// 3.0: OK
// 3.1 as-is: OK
// 3.1 minus widening propagation: error
obj.b = false;
}
function f2() {
type Element = (string | false);
type ElementOrArray = Element | Element[];
let el: Element = null as any;
let arr: Element[] = null as any;
let elOrA: ElementOrArray = null as any;
// Desired/actual: All OK
let a1: ElementOrArray = el;
let a2: ElementOrArray = arr;
let a3: ElementOrArray = [el];
let a4: ElementOrArray = Array.isArray(elOrA) ? elOrA : [elOrA];
// Desired: OK
// 3.0: Error
// 3.1: OK
let a5: ElementOrArray = [...Array.isArray(elOrA) ? elOrA : [elOrA]];
}
function f3() {
type XY = 'x' | 'y';
const x: XY = 'x';
let x2 = x;
// Desired: OK (up for debate?)
// 3.0: Error
// 3.1 as-is: OK
x2 = 'y';
~~
!!! error TS2322: Type '"y"' is not assignable to type '"x"'.
// Desired/actual: All OK
let x3: XY = x;
x3 = 'y';
}
function f4() {
const x: boolean = true;
let x1 = x;
// Desired: OK
// 3.0: OK
// 3.1: OK
// 3.1 minus widening propagation: error
x1 = false;
}
function f5() {
type XY = 'x' | 'y';
let arr: XY[] = ['x'];
arr = ['y'];
// Desired: OK
// Error in all extant branches
arr = [...['y']];
~~~
!!! error TS2322: Type 'string[]' is not assignable to type 'XY[]'.
!!! error TS2322: Type 'string' is not assignable to type 'XY'.
}
|