Closed
Description
TypeScript Version: 2.4.2 and 2.5.1
Code
class A {
static readonly FOO = 1;
static readonly BAR = 2;
}
type Foo = { type: typeof A.FOO, foo: number }
type Bar = { type: typeof A.BAR, bar: string }
type FooBar = Foo | Bar
function test(fb: FooBar) {
if (fb.type == A.FOO) {
return fb.foo
}
}
Expected behavior:
This works as expected as-is, but if the test function is in a separate package it should work too.
Actual behavior:
In the generated .d.ts, the types of FOO and BAR are number
, instead of 1
and 2
respectively. This breaks the discriminated union when it is used in a separate package which only references the .d.ts.
Workaround: When specifying the types of FOO and BAR explicitly, they are propagated correctly to the .d.ts.