Typescript: Improper usage of properties with missing set / get should be an error

Created on 29 Jul 2014  路  5Comments  路  Source: microsoft/TypeScript

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)

Duplicate Suggestion

Most helpful comment

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

All 5 comments

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.

@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?

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

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).

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...

Was this page helpful?
0 / 5 - 0 ratings