Closed
Description
TypeScript Version: 2.4.1
Code
// strictNullChecks: true
let x : string | undefined
let y = x!
type t1 = typeof x!
type t2 = typeof y
Expected behavior:
the t1
statement should create a type
of type string
.
the t2
statement should create a type
of type string
.
Actual behavior:
the t1
statement errors with ';' semicolon expected
.
the t2
statement creates a type
of type string
.
There appears to be no way to achieve this without defining a separate variable, or by type guarding to remove the undefined
/ null
.
With strict null checks on, this is especially troublesome in the case of generics with extends clauses, i.e.
class Foo {}
class Bar<T extends Foo> {}
const x : Foo | undefined
const y = new Bar<typeof x>() // throws an exception because typeof x === Foo | undefined != Foo
It would be great if the non-null assertion operator worked natively in typeof statements, or even if you could use brackets to resolve the assertion before the typeof.