tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(8,1): error TS18048: 's1' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(12,9): error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(16,9): error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(23,1): error TS18048: 't1' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(26,1): error TS18048: 't2.z' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(34,5): error TS18048: 'z' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(41,5): error TS18048: 'q.z' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(52,5): error TS18048: 'q.z' is possibly 'undefined'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(62,2): error TS2322: Type 'string | undefined' is not assignable to type 'string'.
  Type 'undefined' is not assignable to type 'string'.
tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts(71,8): error TS2322: Type 'number | undefined' is not assignable to type 'number'.
  Type 'undefined' is not assignable to type 'number'.


==== tests/cases/conformance/pedantic/noUncheckedIndexedAccessDestructuring.ts (10 errors) ====
    declare const strArray: string[];
    declare const strStrTuple: [string, string];
    
    // Declaration forms for array destructuring
    
    // Destructuring from a simple array -> include undefined
    const [s1] = strArray;
    s1.toString(); // Should error, s1 possibly undefined
    ~~
!!! error TS18048: 's1' is possibly 'undefined'.
    
    // Destructuring a rest element -> do not include undefined
    const [...s2] = strArray;
    s2.push(undefined); // Should error, 'undefined' not part of s2's element type
            ~~~~~~~~~
!!! error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'.
    
    // Destructuring a rest element -> do not include undefined
    const [, , ...s3] = strArray;
    s3.push(undefined); // Should error, 'undefined' not part of s2's element type
            ~~~~~~~~~
!!! error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'.
    
    // Declaration forms for object destructuring
    
    declare const strMap: { [s: string]: string };
    
    const { t1 } = strMap;
    t1.toString(); // Should error, t1 possibly undefined
    ~~
!!! error TS18048: 't1' is possibly 'undefined'.
    
    const { ...t2 } = strMap;
    t2.z.toString(); // Should error
    ~~~~
!!! error TS18048: 't2.z' is possibly 'undefined'.
    
    // Test intersections with declared properties
    declare const numMapPoint: { x: number, y: number} & { [s: string]: number };
    {
        const { x, y, z } = numMapPoint;
        x.toFixed(); // Should OK
        y.toFixed(); // Should OK
        z.toFixed(); // Should error
        ~
!!! error TS18048: 'z' is possibly 'undefined'.
    }
    
    {
        const { x, ...q } = numMapPoint;
        x.toFixed(); // Should OK
        q.y.toFixed(); // Should OK
        q.z.toFixed(); // Should error
        ~~~
!!! error TS18048: 'q.z' is possibly 'undefined'.
    }
    
    {
        const { x, ...q } = numMapPoint;
        x.
        toFixed(); // Should OK
    
        q.
        y.toFixed(); // Should OK
    
        q.
        ~~
        z.toFixed(); // Should error
    ~~~~~
!!! error TS18048: 'q.z' is possibly 'undefined'.
    }
    
    
    declare let target_string: string;
    declare let target_string_undef: string | undefined;
    declare let target_string_arr: string[];
    
    // Assignment forms
    [target_string] = strArray; // Should error
     ~~~~~~~~~~~~~
!!! error TS2322: Type 'string | undefined' is not assignable to type 'string'.
!!! error TS2322:   Type 'undefined' is not assignable to type 'string'.
    [target_string_undef] = strArray;  // Should OK
    [,,, ...target_string_arr] = strArray; // Should OK
    
    {
        let x: number, y: number, z: number | undefined;
        ({ x, y, z } = numMapPoint); // Should OK
    
        let q: number;
        ({ q } = numMapPoint); // Should error
           ~
!!! error TS2322: Type 'number | undefined' is not assignable to type 'number'.
!!! error TS2322:   Type 'undefined' is not assignable to type 'number'.
    }
    