TypeScript/tests/baselines/reference/noUncheckedIndexedAccessDestructuring.symbols
Ryan Cavanaugh 3d235b42a0
--noUncheckedIndexedAccess (#39560)
* Initial implementation + tests

* linty

* Support destructuring declarations and assignments

* lint

* Fix destructuring assignment and element access into known properties

* Update baselines

* Rename flag to unUncheckedIndexedAccess

* Add test for unique symbol indexing

* Fix flag order in baselines

Co-authored-by: Andrew Branch <andrew@wheream.io>
2020-09-11 14:43:10 -07:00

162 lines
7.7 KiB
Plaintext

=== tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts ===
declare const strArray: string[];
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
declare const strStrTuple: [string, string];
>strStrTuple : Symbol(strStrTuple, Decl(noUncheckedIndexedAccessDestructuring.ts, 1, 13))
// Declaration forms for array destructuring
// Destructuring from a simple array -> include undefined
const [s1] = strArray;
>s1 : Symbol(s1, Decl(noUncheckedIndexedAccessDestructuring.ts, 6, 7))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
s1.toString(); // Should error, s1 possibly undefined
>s1.toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
>s1 : Symbol(s1, Decl(noUncheckedIndexedAccessDestructuring.ts, 6, 7))
>toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
// Destructuring a rest element -> do not include undefined
const [...s2] = strArray;
>s2 : Symbol(s2, Decl(noUncheckedIndexedAccessDestructuring.ts, 10, 7))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
s2.push(undefined); // Should error, 'undefined' not part of s2's element type
>s2.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
>s2 : Symbol(s2, Decl(noUncheckedIndexedAccessDestructuring.ts, 10, 7))
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
>undefined : Symbol(undefined)
// Destructuring a rest element -> do not include undefined
const [, , ...s3] = strArray;
>s3 : Symbol(s3, Decl(noUncheckedIndexedAccessDestructuring.ts, 14, 10))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
s3.push(undefined); // Should error, 'undefined' not part of s2's element type
>s3.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
>s3 : Symbol(s3, Decl(noUncheckedIndexedAccessDestructuring.ts, 14, 10))
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
>undefined : Symbol(undefined)
// Declaration forms for object destructuring
declare const strMap: { [s: string]: string };
>strMap : Symbol(strMap, Decl(noUncheckedIndexedAccessDestructuring.ts, 19, 13))
>s : Symbol(s, Decl(noUncheckedIndexedAccessDestructuring.ts, 19, 25))
const { t1 } = strMap;
>t1 : Symbol(t1, Decl(noUncheckedIndexedAccessDestructuring.ts, 21, 7))
>strMap : Symbol(strMap, Decl(noUncheckedIndexedAccessDestructuring.ts, 19, 13))
t1.toString(); // Should error, t1 possibly undefined
>t1.toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
>t1 : Symbol(t1, Decl(noUncheckedIndexedAccessDestructuring.ts, 21, 7))
>toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
const { ...t2 } = strMap;
>t2 : Symbol(t2, Decl(noUncheckedIndexedAccessDestructuring.ts, 24, 7))
>strMap : Symbol(strMap, Decl(noUncheckedIndexedAccessDestructuring.ts, 19, 13))
t2.z.toString(); // Should error
>t2.z.toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
>t2 : Symbol(t2, Decl(noUncheckedIndexedAccessDestructuring.ts, 24, 7))
>toString : Symbol(String.toString, Decl(lib.es5.d.ts, --, --))
// Test intersections with declared properties
declare const numMapPoint: { x: number, y: number} & { [s: string]: number };
>numMapPoint : Symbol(numMapPoint, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 13))
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 28))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 39))
>s : Symbol(s, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 56))
{
const { x, y, z } = numMapPoint;
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 11))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 14))
>z : Symbol(z, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 17))
>numMapPoint : Symbol(numMapPoint, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 13))
x.toFixed(); // Should OK
>x.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 11))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
y.toFixed(); // Should OK
>y.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 14))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
z.toFixed(); // Should error
>z.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>z : Symbol(z, Decl(noUncheckedIndexedAccessDestructuring.ts, 30, 17))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
}
{
const { x, ...q } = numMapPoint;
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 37, 11))
>q : Symbol(q, Decl(noUncheckedIndexedAccessDestructuring.ts, 37, 14))
>numMapPoint : Symbol(numMapPoint, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 13))
x.toFixed(); // Should OK
>x.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 37, 11))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
q.y.toFixed(); // Should OK
>q.y.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>q.y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 39))
>q : Symbol(q, Decl(noUncheckedIndexedAccessDestructuring.ts, 37, 14))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 39))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
q.z.toFixed(); // Should error
>q.z.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
>q : Symbol(q, Decl(noUncheckedIndexedAccessDestructuring.ts, 37, 14))
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
}
declare let target_string: string;
>target_string : Symbol(target_string, Decl(noUncheckedIndexedAccessDestructuring.ts, 44, 11))
declare let target_string_undef: string | undefined;
>target_string_undef : Symbol(target_string_undef, Decl(noUncheckedIndexedAccessDestructuring.ts, 45, 11))
declare let target_string_arr: string[];
>target_string_arr : Symbol(target_string_arr, Decl(noUncheckedIndexedAccessDestructuring.ts, 46, 11))
// Assignment forms
[target_string] = strArray; // Should error
>target_string : Symbol(target_string, Decl(noUncheckedIndexedAccessDestructuring.ts, 44, 11))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
[target_string_undef] = strArray; // Should OK
>target_string_undef : Symbol(target_string_undef, Decl(noUncheckedIndexedAccessDestructuring.ts, 45, 11))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
[,,, ...target_string_arr] = strArray; // Should OK
>target_string_arr : Symbol(target_string_arr, Decl(noUncheckedIndexedAccessDestructuring.ts, 46, 11))
>strArray : Symbol(strArray, Decl(noUncheckedIndexedAccessDestructuring.ts, 0, 13))
{
let x: number, y: number, z: number | undefined;
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 54, 7))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 54, 18))
>z : Symbol(z, Decl(noUncheckedIndexedAccessDestructuring.ts, 54, 29))
({ x, y, z } = numMapPoint); // Should OK
>x : Symbol(x, Decl(noUncheckedIndexedAccessDestructuring.ts, 55, 6))
>y : Symbol(y, Decl(noUncheckedIndexedAccessDestructuring.ts, 55, 9))
>z : Symbol(z, Decl(noUncheckedIndexedAccessDestructuring.ts, 55, 12))
>numMapPoint : Symbol(numMapPoint, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 13))
let q: number;
>q : Symbol(q, Decl(noUncheckedIndexedAccessDestructuring.ts, 57, 7))
({ q } = numMapPoint); // Should error
>q : Symbol(q, Decl(noUncheckedIndexedAccessDestructuring.ts, 58, 6))
>numMapPoint : Symbol(numMapPoint, Decl(noUncheckedIndexedAccessDestructuring.ts, 28, 13))
}