@@ -85,3 +85,46 @@ function g1<T extends {}, A extends { z: (T | undefined) & T }>(a: A) {
8585 };
8686}
8787
88+ // Repro from #47028
89+
90+ interface DatafulFoo<T> {
91+ >DatafulFoo : Symbol(DatafulFoo, Decl(spreadObjectOrFalsy.ts, 31, 1))
92+ >T : Symbol(T, Decl(spreadObjectOrFalsy.ts, 35, 21))
93+
94+ data: T;
95+ >data : Symbol(DatafulFoo.data, Decl(spreadObjectOrFalsy.ts, 35, 25))
96+ >T : Symbol(T, Decl(spreadObjectOrFalsy.ts, 35, 21))
97+ }
98+
99+ class Foo<T extends string> {
100+ >Foo : Symbol(Foo, Decl(spreadObjectOrFalsy.ts, 37, 1))
101+ >T : Symbol(T, Decl(spreadObjectOrFalsy.ts, 39, 10))
102+
103+ data: T | undefined;
104+ >data : Symbol(Foo.data, Decl(spreadObjectOrFalsy.ts, 39, 29))
105+ >T : Symbol(T, Decl(spreadObjectOrFalsy.ts, 39, 10))
106+
107+ bar() {
108+ >bar : Symbol(Foo.bar, Decl(spreadObjectOrFalsy.ts, 40, 24))
109+
110+ if (this.hasData()) {
111+ >this.hasData : Symbol(Foo.hasData, Decl(spreadObjectOrFalsy.ts, 45, 5))
112+ >this : Symbol(Foo, Decl(spreadObjectOrFalsy.ts, 37, 1))
113+ >hasData : Symbol(Foo.hasData, Decl(spreadObjectOrFalsy.ts, 45, 5))
114+
115+ this.data.toLocaleLowerCase();
116+ >this.data.toLocaleLowerCase : Symbol(String.toLocaleLowerCase, Decl(lib.es5.d.ts, --, --))
117+ >this.data : Symbol(data, Decl(spreadObjectOrFalsy.ts, 39, 29), Decl(spreadObjectOrFalsy.ts, 35, 25))
118+ >data : Symbol(data, Decl(spreadObjectOrFalsy.ts, 39, 29), Decl(spreadObjectOrFalsy.ts, 35, 25))
119+ >toLocaleLowerCase : Symbol(String.toLocaleLowerCase, Decl(lib.es5.d.ts, --, --))
120+ }
121+ }
122+ hasData(): this is DatafulFoo<T> {
123+ >hasData : Symbol(Foo.hasData, Decl(spreadObjectOrFalsy.ts, 45, 5))
124+ >DatafulFoo : Symbol(DatafulFoo, Decl(spreadObjectOrFalsy.ts, 31, 1))
125+ >T : Symbol(T, Decl(spreadObjectOrFalsy.ts, 39, 10))
126+
127+ return true;
128+ }
129+ }
130+
0 commit comments