1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
=== tests/cases/compiler/silentNeverPropagation.ts ===
// Repro from #45041
type ModuleWithState<TState> = {
>ModuleWithState : ModuleWithState<TState>
state: TState;
>state : TState
};
type State = {
>State : { a: number; }
a: number;
>a : number
};
type MoreState = {
>MoreState : { z: string; }
z: string;
>z : string
};
declare function createModule<TState, TActions>(state: TState, actions: TActions): ModuleWithState<TState> & TActions;
>createModule : <TState, TActions>(state: TState, actions: TActions) => ModuleWithState<TState> & TActions
>state : TState
>actions : TActions
declare function convert<TState, TActions>(m: ModuleWithState<TState> & TActions): ModuleWithState<TState & MoreState> & TActions;
>convert : <TState, TActions>(m: ModuleWithState<TState> & TActions) => ModuleWithState<TState & MoreState> & TActions
>m : ModuleWithState<TState> & TActions
const breaks = convert(
>breaks : ModuleWithState<{ a: number; } & MoreState> & ModuleWithState<{ a: number; }> & { foo(): true; }
>convert( createModule({ a: 12 }, { foo() { return true } })) : ModuleWithState<{ a: number; } & MoreState> & ModuleWithState<{ a: number; }> & { foo(): true; }
>convert : <TState, TActions>(m: ModuleWithState<TState> & TActions) => ModuleWithState<TState & MoreState> & TActions
createModule({ a: 12 }, { foo() { return true } })
>createModule({ a: 12 }, { foo() { return true } }) : ModuleWithState<{ a: number; }> & { foo(): true; }
>createModule : <TState, TActions>(state: TState, actions: TActions) => ModuleWithState<TState> & TActions
>{ a: 12 } : { a: number; }
>a : number
>12 : 12
>{ foo() { return true } } : { foo(): true; }
>foo : () => true
>true : true
);
breaks.state.a
>breaks.state.a : number
>breaks.state : { a: number; } & MoreState
>breaks : ModuleWithState<{ a: number; } & MoreState> & ModuleWithState<{ a: number; }> & { foo(): true; }
>state : { a: number; } & MoreState
>a : number
breaks.state.z
>breaks.state.z : string
>breaks.state : { a: number; } & MoreState
>breaks : ModuleWithState<{ a: number; } & MoreState> & ModuleWithState<{ a: number; }> & { foo(): true; }
>state : { a: number; } & MoreState
>z : string
breaks.foo()
>breaks.foo() : true
>breaks.foo : () => true
>breaks : ModuleWithState<{ a: number; } & MoreState> & ModuleWithState<{ a: number; }> & { foo(): true; }
>foo : () => true
|