TypeScript/tests/cases/conformance/types/nonPrimitive/nonPrimitiveStrictNull.ts

62 lines
1.1 KiB
TypeScript
Raw Normal View History

2016-11-26 05:49:55 +01:00
// @strictNullChecks: true
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
a = undefined; // error
a = null; // error
a = b; // error
a = c; // error
a = d; // error
e = a; // ok
a = e; // ok
if (typeof b !== 'object') {
b.toString(); // error, never
}
if (typeof b === 'object') {
a = b; // error, b is not narrowed
}
if (typeof d === 'object') {
b = d; // ok
2016-11-26 06:09:20 +01:00
d.toString(); // error, object | null
2016-11-26 05:49:55 +01:00
} else {
2016-11-26 06:09:20 +01:00
d.toString(); // error, undefined
2016-11-26 05:49:55 +01:00
}
if (d == null) {
2016-11-26 06:09:20 +01:00
d.toString(); // error, undefined | null
2016-11-26 05:49:55 +01:00
} else {
d.toString(); // object
}
if (d === null) {
2016-11-26 06:09:20 +01:00
d.toString(); // error, null
2016-11-26 05:49:55 +01:00
} else {
d.toString(); // error, object | undefined
}
if (typeof d === 'undefined') {
2016-11-26 06:09:20 +01:00
d.toString(); // error, undefined
2016-11-26 05:49:55 +01:00
} else {
d.toString(); // error, object | null
}
interface Proxy<T extends object> {}
var x: Proxy<number>; // error
var y: Proxy<null>; // error
var z: Proxy<undefined>; // error
interface Blah {
foo: number;
}
var u: Proxy<Blah>; // ok