- Notifications
You must be signed in to change notification settings - Fork 13k
Open
Labels
Milestone
Description
🔎 Search Terms
loss of type, for loop, for-loop, class field
🕗 Version & Regression Information
- This changed between versions ______ and _______
- This changed in commit or PR _______
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
- I was unable to test this on prior versions because _______
⏯ Playground Link
💻 Code
interface Application { id: string; category: { id: string; } } class Applications { public FindApplication(query: string): Application | null { return null; } } class Test { SelectedApplications: Set<string> = new Set(); Applications: Applications | null = null; get SelectedApplicationsByCategory(): Partial<Record<string, Set<string>>> | null { // Workaround 1: move this block inside for loop // Workaround 2: Save this.Applications to a const then use that if (this.Applications === null) { return null; } const result: Partial<Record<string, Set<string>>> = {}; for (const applicationID of this.SelectedApplications) { const application = this.Applications.FindApplication(applicationID); if (application === null) { continue; } const categoryID = application.category.id; const applications = result[categoryID] ?? new Set<string>(); applications.add(application.id); // Comment/uncomment the following line to see it break/unbreak result[categoryID] = applications; } return result; } }
🙁 Actual behavior
application
has type: any
. FindApplication
returns Application | null
, but that gets lost somewhere.
🙂 Expected behavior
type for application
should be Application | null
.
Additional information about the issue
See comments in code for workarounds and to see another line break type inference.