@@ -253,3 +253,76 @@ function init2(foo: DeepOptional) {
253253 }
254254 }
255255}
256+
257+ // Repro from #48289
258+
259+ type Fish = { type: 'fish', hasFins: true }
260+ >Fish : Symbol(Fish, Decl(narrowingOfQualifiedNames.ts, 64, 1))
261+ >type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 68, 13))
262+ >hasFins : Symbol(hasFins, Decl(narrowingOfQualifiedNames.ts, 68, 27))
263+
264+ type Dog = { type: 'dog', saysWoof: true }
265+ >Dog : Symbol(Dog, Decl(narrowingOfQualifiedNames.ts, 68, 43))
266+ >type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 69, 12))
267+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
268+
269+ type Pet = Fish | Dog;
270+ >Pet : Symbol(Pet, Decl(narrowingOfQualifiedNames.ts, 69, 42))
271+ >Fish : Symbol(Fish, Decl(narrowingOfQualifiedNames.ts, 64, 1))
272+ >Dog : Symbol(Dog, Decl(narrowingOfQualifiedNames.ts, 68, 43))
273+
274+ function handleDogBroken<PetType extends Pet>(pet: PetType) {
275+ >handleDogBroken : Symbol(handleDogBroken, Decl(narrowingOfQualifiedNames.ts, 71, 22))
276+ >PetType : Symbol(PetType, Decl(narrowingOfQualifiedNames.ts, 73, 25))
277+ >Pet : Symbol(Pet, Decl(narrowingOfQualifiedNames.ts, 69, 42))
278+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 73, 46))
279+ >PetType : Symbol(PetType, Decl(narrowingOfQualifiedNames.ts, 73, 25))
280+
281+ if(pet.type === 'dog') {
282+ >pet.type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 68, 13), Decl(narrowingOfQualifiedNames.ts, 69, 12))
283+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 73, 46))
284+ >type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 68, 13), Decl(narrowingOfQualifiedNames.ts, 69, 12))
285+
286+ const _okay1 = pet.saysWoof;
287+ >_okay1 : Symbol(_okay1, Decl(narrowingOfQualifiedNames.ts, 75, 13))
288+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
289+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 73, 46))
290+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
291+
292+ const _okay2: typeof pet.saysWoof = pet.saysWoof;
293+ >_okay2 : Symbol(_okay2, Decl(narrowingOfQualifiedNames.ts, 76, 13))
294+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
295+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 73, 46))
296+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
297+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
298+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 73, 46))
299+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
300+ }
301+ }
302+
303+ function handleDogWorking(pet: Pet) {
304+ >handleDogWorking : Symbol(handleDogWorking, Decl(narrowingOfQualifiedNames.ts, 78, 1))
305+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 80, 26))
306+ >Pet : Symbol(Pet, Decl(narrowingOfQualifiedNames.ts, 69, 42))
307+
308+ if(pet.type === 'dog') {
309+ >pet.type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 68, 13), Decl(narrowingOfQualifiedNames.ts, 69, 12))
310+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 80, 26))
311+ >type : Symbol(type, Decl(narrowingOfQualifiedNames.ts, 68, 13), Decl(narrowingOfQualifiedNames.ts, 69, 12))
312+
313+ const _okay1 = pet.saysWoof;
314+ >_okay1 : Symbol(_okay1, Decl(narrowingOfQualifiedNames.ts, 82, 13))
315+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
316+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 80, 26))
317+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
318+
319+ const _okay2: typeof pet.saysWoof = pet.saysWoof;
320+ >_okay2 : Symbol(_okay2, Decl(narrowingOfQualifiedNames.ts, 83, 13))
321+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
322+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 80, 26))
323+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
324+ >pet.saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
325+ >pet : Symbol(pet, Decl(narrowingOfQualifiedNames.ts, 80, 26))
326+ >saysWoof : Symbol(saysWoof, Decl(narrowingOfQualifiedNames.ts, 69, 25))
327+ }
328+ }
0 commit comments