195 lines
5.6 KiB
Plaintext
195 lines
5.6 KiB
Plaintext
=== tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts ===
|
|
declare const strArray: string[];
|
|
>strArray : string[]
|
|
|
|
declare const strStrTuple: [string, string];
|
|
>strStrTuple : [string, string]
|
|
|
|
// Declaration forms for array destructuring
|
|
|
|
// Destructuring from a simple array -> include undefined
|
|
const [s1] = strArray;
|
|
>s1 : string | undefined
|
|
>strArray : string[]
|
|
|
|
s1.toString(); // Should error, s1 possibly undefined
|
|
>s1.toString() : string
|
|
>s1.toString : () => string
|
|
>s1 : string | undefined
|
|
>toString : () => string
|
|
|
|
// Destructuring a rest element -> do not include undefined
|
|
const [...s2] = strArray;
|
|
>s2 : string[]
|
|
>strArray : string[]
|
|
|
|
s2.push(undefined); // Should error, 'undefined' not part of s2's element type
|
|
>s2.push(undefined) : number
|
|
>s2.push : (...items: string[]) => number
|
|
>s2 : string[]
|
|
>push : (...items: string[]) => number
|
|
>undefined : undefined
|
|
|
|
// Destructuring a rest element -> do not include undefined
|
|
const [, , ...s3] = strArray;
|
|
> : undefined
|
|
> : undefined
|
|
>s3 : string[]
|
|
>strArray : string[]
|
|
|
|
s3.push(undefined); // Should error, 'undefined' not part of s2's element type
|
|
>s3.push(undefined) : number
|
|
>s3.push : (...items: string[]) => number
|
|
>s3 : string[]
|
|
>push : (...items: string[]) => number
|
|
>undefined : undefined
|
|
|
|
// Declaration forms for object destructuring
|
|
|
|
declare const strMap: { [s: string]: string };
|
|
>strMap : { [s: string]: string; }
|
|
>s : string
|
|
|
|
const { t1 } = strMap;
|
|
>t1 : string | undefined
|
|
>strMap : { [s: string]: string; }
|
|
|
|
t1.toString(); // Should error, t1 possibly undefined
|
|
>t1.toString() : string
|
|
>t1.toString : () => string
|
|
>t1 : string | undefined
|
|
>toString : () => string
|
|
|
|
const { ...t2 } = strMap;
|
|
>t2 : { [s: string]: string; }
|
|
>strMap : { [s: string]: string; }
|
|
|
|
t2.z.toString(); // Should error
|
|
>t2.z.toString() : string
|
|
>t2.z.toString : () => string
|
|
>t2.z : string | undefined
|
|
>t2 : { [s: string]: string; }
|
|
>z : string | undefined
|
|
>toString : () => string
|
|
|
|
// Test intersections with declared properties
|
|
declare const numMapPoint: { x: number, y: number} & { [s: string]: number };
|
|
>numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
>x : number
|
|
>y : number
|
|
>s : string
|
|
{
|
|
const { x, y, z } = numMapPoint;
|
|
>x : number
|
|
>y : number
|
|
>z : number | undefined
|
|
>numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
|
|
x.toFixed(); // Should OK
|
|
>x.toFixed() : string
|
|
>x.toFixed : (fractionDigits?: number | undefined) => string
|
|
>x : number
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
|
|
y.toFixed(); // Should OK
|
|
>y.toFixed() : string
|
|
>y.toFixed : (fractionDigits?: number | undefined) => string
|
|
>y : number
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
|
|
z.toFixed(); // Should error
|
|
>z.toFixed() : string
|
|
>z.toFixed : (fractionDigits?: number | undefined) => string
|
|
>z : number | undefined
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
}
|
|
|
|
{
|
|
const { x, ...q } = numMapPoint;
|
|
>x : number
|
|
>q : { [s: string]: number; y: number; }
|
|
>numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
|
|
x.toFixed(); // Should OK
|
|
>x.toFixed() : string
|
|
>x.toFixed : (fractionDigits?: number | undefined) => string
|
|
>x : number
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
|
|
q.y.toFixed(); // Should OK
|
|
>q.y.toFixed() : string
|
|
>q.y.toFixed : (fractionDigits?: number | undefined) => string
|
|
>q.y : number
|
|
>q : { [s: string]: number; y: number; }
|
|
>y : number
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
|
|
q.z.toFixed(); // Should error
|
|
>q.z.toFixed() : string
|
|
>q.z.toFixed : (fractionDigits?: number | undefined) => string
|
|
>q.z : number | undefined
|
|
>q : { [s: string]: number; y: number; }
|
|
>z : number | undefined
|
|
>toFixed : (fractionDigits?: number | undefined) => string
|
|
}
|
|
|
|
|
|
declare let target_string: string;
|
|
>target_string : string
|
|
|
|
declare let target_string_undef: string | undefined;
|
|
>target_string_undef : string | undefined
|
|
|
|
declare let target_string_arr: string[];
|
|
>target_string_arr : string[]
|
|
|
|
// Assignment forms
|
|
[target_string] = strArray; // Should error
|
|
>[target_string] = strArray : string[]
|
|
>[target_string] : [string]
|
|
>target_string : string
|
|
>strArray : string[]
|
|
|
|
[target_string_undef] = strArray; // Should OK
|
|
>[target_string_undef] = strArray : string[]
|
|
>[target_string_undef] : [string | undefined]
|
|
>target_string_undef : string | undefined
|
|
>strArray : string[]
|
|
|
|
[,,, ...target_string_arr] = strArray; // Should OK
|
|
>[,,, ...target_string_arr] = strArray : string[]
|
|
>[,,, ...target_string_arr] : [undefined, undefined, undefined, ...string[]]
|
|
> : undefined
|
|
> : undefined
|
|
> : undefined
|
|
>...target_string_arr : string
|
|
>target_string_arr : string[]
|
|
>strArray : string[]
|
|
|
|
{
|
|
let x: number, y: number, z: number | undefined;
|
|
>x : number
|
|
>y : number
|
|
>z : number | undefined
|
|
|
|
({ x, y, z } = numMapPoint); // Should OK
|
|
>({ x, y, z } = numMapPoint) : { x: number; y: number; } & { [s: string]: number; }
|
|
>{ x, y, z } = numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
>{ x, y, z } : { x: number; y: number; z: number | undefined; }
|
|
>x : number
|
|
>y : number
|
|
>z : number | undefined
|
|
>numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
|
|
let q: number;
|
|
>q : number
|
|
|
|
({ q } = numMapPoint); // Should error
|
|
>({ q } = numMapPoint) : { x: number; y: number; } & { [s: string]: number; }
|
|
>{ q } = numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
>{ q } : { q: number; }
|
|
>q : number
|
|
>numMapPoint : { x: number; y: number; } & { [s: string]: number; }
|
|
}
|
|
|