tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(6,1): error TS2454: Variable 'a' is used before being assigned. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(7,1): error TS2322: Type 'undefined' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(8,1): error TS2322: Type 'null' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(9,1): error TS2322: Type 'object | null' is not assignable to type 'object'. Type 'null' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(10,1): error TS2322: Type 'object | undefined' is not assignable to type 'object'. Type 'undefined' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(11,1): error TS2322: Type 'object | null | undefined' is not assignable to type 'object'. Type 'undefined' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(17,7): error TS2339: Property 'toString' does not exist on type 'never'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(21,5): error TS2322: Type 'object | null' is not assignable to type 'object'. Type 'null' is not assignable to type 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(26,5): error TS18047: 'd' is possibly 'null'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(28,5): error TS18048: 'd' is possibly 'undefined'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(32,5): error TS18049: 'd' is possibly 'null' or 'undefined'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(38,5): error TS18047: 'd' is possibly 'null'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(40,5): error TS18048: 'd' is possibly 'undefined'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(44,5): error TS18048: 'd' is possibly 'undefined'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(46,5): error TS18047: 'd' is possibly 'null'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(51,14): error TS2344: Type 'number' does not satisfy the constraint 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(52,14): error TS2344: Type 'null' does not satisfy the constraint 'object'. tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts(53,14): error TS2344: Type 'undefined' does not satisfy the constraint 'object'. ==== tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts (18 errors) ==== var a: object declare var b: object | null declare var c: object | undefined declare var d: object | null | undefined var e: object | null a.toString; // error ~ !!! error TS2454: Variable 'a' is used before being assigned. a = undefined; // error ~ !!! error TS2322: Type 'undefined' is not assignable to type 'object'. a = null; // error ~ !!! error TS2322: Type 'null' is not assignable to type 'object'. a = b; // error ~ !!! error TS2322: Type 'object | null' is not assignable to type 'object'. !!! error TS2322: Type 'null' is not assignable to type 'object'. a = c; // error ~ !!! error TS2322: Type 'object | undefined' is not assignable to type 'object'. !!! error TS2322: Type 'undefined' is not assignable to type 'object'. a = d; // error ~ !!! error TS2322: Type 'object | null | undefined' is not assignable to type 'object'. !!! error TS2322: Type 'undefined' is not assignable to type 'object'. e = a; // ok a = e; // ok if (typeof b !== 'object') { b.toString(); // error, never ~~~~~~~~ !!! error TS2339: Property 'toString' does not exist on type 'never'. } if (typeof b === 'object') { a = b; // error, b is not narrowed ~ !!! error TS2322: Type 'object | null' is not assignable to type 'object'. !!! error TS2322: Type 'null' is not assignable to type 'object'. } if (typeof d === 'object') { b = d; // ok d.toString(); // error, object | null ~ !!! error TS18047: 'd' is possibly 'null'. } else { d.toString(); // error, undefined ~ !!! error TS18048: 'd' is possibly 'undefined'. } if (d == null) { d.toString(); // error, undefined | null ~ !!! error TS18049: 'd' is possibly 'null' or 'undefined'. } else { d.toString(); // object } if (d === null) { d.toString(); // error, null ~ !!! error TS18047: 'd' is possibly 'null'. } else { d.toString(); // error, object | undefined ~ !!! error TS18048: 'd' is possibly 'undefined'. } if (typeof d === 'undefined') { d.toString(); // error, undefined ~ !!! error TS18048: 'd' is possibly 'undefined'. } else { d.toString(); // error, object | null ~ !!! error TS18047: 'd' is possibly 'null'. } interface Proxy {} var x: Proxy; // error ~~~~~~ !!! error TS2344: Type 'number' does not satisfy the constraint 'object'. var y: Proxy; // error ~~~~ !!! error TS2344: Type 'null' does not satisfy the constraint 'object'. var z: Proxy; // error ~~~~~~~~~ !!! error TS2344: Type 'undefined' does not satisfy the constraint 'object'. interface Blah { foo: number; } var u: Proxy; // ok