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

Improper usage of properties with missing set / get should be an error #295

Closed
basarat opened this issue Jul 29, 2014 · 5 comments
Closed
Labels
Duplicate An existing issue was already created Suggestion An idea for TypeScript

Comments

@basarat
Copy link
Contributor

basarat commented Jul 29, 2014

If a property has a getter but no setter (or vice versa) than perhaps the attempt to set or get should be flagged as an error:

class Fields{
    get ReadOnly(){
        return 10;
    }

    public written:number;
    set WriteOnly(value:number){
        this.written = value; 
    }
}

var obj = new Fields();

console.log(obj.ReadOnly); // 10
obj.ReadOnly = 20;  // cannot set but no error 
console.log(obj.ReadOnly) // 10 

obj.WriteOnly = 20; 
console.log(obj.written) // 20 
console.log(obj.WriteOnly); // cannot read but no error 

No biggie. But something to be aware of. (ported from http://typescript.codeplex.com/workitem/834)

@danquirk
Copy link
Member

It certainly would be nice. The biggest problem here is that getter/setter and properties are not differentiated at the type level. That is, the .d.ts for the above type is:

class Fields {
    ReadOnly: number;
    written: number;
    WriteOnly: number;
}

so obviously you now can't do any of these kinds of checks unless you have the full implementation to inspect. If we did #12 then this kind of checking would likely fall out of that nicely so I'm just going to close this.

@myitcv
Copy link

myitcv commented Sep 18, 2015

@danquirk looking at the issues that are linked to #12, it seems the vast majority relate to this issue, namely the silent treatment of accessing non-existent getters/setters.

Is there something preventing getters/setters being differentiated at the type level?

@joelday
Copy link
Contributor

joelday commented Jan 2, 2016

@danquirk This needs to be deduped from #12. This is about a compile time error for a guaranteed run time failure.

@KoenT-X
Copy link

KoenT-X commented Apr 15, 2016

I just ran into this very same bug. If there is no setter for a property, then an error should be flagged (or at least a warning).

@AGiorgetti
Copy link

Yep, I still hit this error times and times again (especially in TypeScript code written by people that start using the language right away without looking into it deeply).

" it compiles, so it should just work" this is what they say...

@microsoft microsoft locked and limited conversation to collaborators Jun 18, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Duplicate An existing issue was already created Suggestion An idea for TypeScript
Projects
None yet
Development

No branches or pull requests

6 participants