Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No referencing/intellisense fo nested properties/functions within class #7801

Closed
magicode118 opened this issue Apr 4, 2016 · 5 comments
Closed
Assignees
Labels
Suggestion An idea for TypeScript Won't Fix The severity and priority of this issue do not warrant the time or complexity needed to fix it

Comments

@magicode118
Copy link

I have the following structure where I have a class that contains functions nested inside properties and vice versa. Intellisense and therefore referencing is not working when inside a function that resides inside a property of the class. Is there a way to solve this sort of issue so that I can reference myThirdProp inside mySecondFunc?

export class a {

    myProperty = 'hello';
    myFunc() {

        this.myProperty; //referencing and intellisense available
    }

    mySecondProp: Object = {

        myThirdProp: 'hello2',
        mySecondFunc() {

            this. //no intellisense/reference here
        }
    }
}
@RyanCavanaugh
Copy link
Member

Currently, we don't really know how mySecondProp.mySecondFunc is going to be invoked, so its this type is any. #6739 should solve this for you by allowing you to specify the type of this inside mySecondFunc.

@mhegazy mhegazy added Bug A bug in TypeScript Suggestion An idea for TypeScript and removed Bug A bug in TypeScript labels Apr 4, 2016
@mhegazy mhegazy added this to the TypeScript 2.0 milestone Apr 4, 2016
@mhegazy mhegazy added the Committed The team has roadmapped this issue label Apr 4, 2016
@sandersn
Copy link
Member

sandersn commented Apr 7, 2016

this inside of an object literal now has Intellisense. @zalow517 can you try typescript@next? It will be available April 8, after the nightly build picks it up.

@sandersn
Copy link
Member

#8389 reverts this fix for now.

@sandersn sandersn reopened this Apr 30, 2016
@mhegazy
Copy link
Contributor

mhegazy commented Apr 30, 2016

Cross positing from #8110 (comment)

We have tried different ways of addressing this issue, and the current behavior (this in an object literal is of type any) seems to be the most reasonable.

Classes present stronger assumptions about how the functions will be called. object literals on the other hand can be used as a property bag often with no assumptions about the relationship of the methods and properties on them. we have seen common JS patterns where methods are added, removed, or called with a different this target at runtime (see #8133 for an example).

the recommendation is to specify an explicit this type in methods:

interface FooBar {
    foo(): void;
    bar(): void;
}

let o = {
    foo: function (this: FooBar) { this /* FooBar */ },
    bar(this: FooBar) { this /* FooBar */ }
}

@mhegazy mhegazy closed this as completed Apr 30, 2016
@mhegazy mhegazy added Won't Fix The severity and priority of this issue do not warrant the time or complexity needed to fix it and removed Committed The team has roadmapped this issue Fixed A PR has been merged for this issue labels Apr 30, 2016
@mhegazy mhegazy removed this from the TypeScript 2.0 milestone Apr 30, 2016
@ahejlsberg
Copy link
Member

See #14141.

@microsoft microsoft locked and limited conversation to collaborators Jun 19, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Suggestion An idea for TypeScript Won't Fix The severity and priority of this issue do not warrant the time or complexity needed to fix it
Projects
None yet
Development

No branches or pull requests

5 participants