Typescript: рдЧреЗрдЯреНрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдкреНрд░реИрд▓ 2015  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рдХреНрдпрд╛ рдЧреЗрдЯрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА/рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рдЧреЗрдЯрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореВрд▓реНрдп рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг:

class MyClass {
    private _myProp: any;
    private set myProp(value: any) {
        this._myProp = value;
    }
    public get myProp(): any {
        return this._myProp;
    }
}
Declined Suggestion Too Complex

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡реИрд╕реЗ рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ +1 рдЬреЛрдбрд╝рдирд╛, рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ...

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

12

рдЪреВрдВрдХрд┐ #12 #6532 рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдХреНрдпрд╛ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
рдХреНрдпреЛрдВрдХрд┐ readonly рдЬреЛ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИ рдЙрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рд╕реЗ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

declare abstract class Emitter {
    new (): Emitter;
    on: (name:string, handler: (arg:any) => void) => void;
    off: (name:string, handler: (arg:any) => void) => void;
    protected emit: (name:string, arg:any) => void;
}

class Person extends Emitter {
    constructor(name:string) {
        super();
        this.name = name;
    }

    private _name:string;
    get name() {
        return this._name;
    }
    set name(value) {
        if (this._name !== value) {
            this._name = value;
            this.emit('change:name', value);
            //this way is better
            this.updatedAt = new Date();
            //than this way
            this.setUpdatedAt(new Date());
        }
    }

    ////
    private _updatedAt:Date;
    get updatedAt() {
        return this._updatedAt;
    }
    private set updatedAt(value) { //Getter and setter do not agree in visibility
                //some logic and a simple readonly (our absence of a setter) is not enough
        if (this._updatedAt !== value) {
            this._updatedAt = value;
            this.emit('change:updatedAt', value);
        }
    }

    //// method implementation - but what's the point in it?
    private setUpdatedAt(value) {
        if (this._updatedAt !== value) {
            this._updatedAt = value;
            this.emit('change:updatedAt', value);
        }
    }
}

const entity = new Person('Mike');
entity.on('change:updatedAt', console.log.bind(console));
entity.name = 'Thomas';
//but manually setting updatedAt should be forbidden
entity.updatedAt = new Date(); //restricted

рдпрд╣рд╛рдВ, рд╕рдВрдкрддреНрддрд┐ updatedAt рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реЗрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ Person рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рд╕реЗрдЯрд░ рдореЗрдВ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрдардиреАрдп рдпрд╛ рдПрдХ рд╕реЗрдЯрд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдЬреА рд╕реЗрдЯрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ (рдЬреИрд╕реЗ рдЙрддреНрд╕рд░реНрдЬрдХ) рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреАрдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕рдВрдЧрдд рд╣реИ рдЬрдм рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ (рдЧреЗрдЯреНрдЯрд░) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рд╡рд┐рдзрд┐ (рдирд┐рдЬреА рд╕реЗрдЯрд░) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред .

рдЗрд╕ рддрд░рд╣ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ C# рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╢реНрдпрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдиреБрдмрдВрдз рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЦреЛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдВ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реАрдбреЛрдирд▓реА рдЧреЗрдЯрд░ рдФрд░ рдПрдХ рдирд┐рдЬреА/рд╕рдВрд░рдХреНрд╖рд┐рдд рдмреИрдХрд┐рдВрдЧ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╣реИред

рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордорд┐рдд рд╣реИрдВред рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдФрд░ рдЧреБрдгреЛрдВ рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред Private_set/public_get рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рднрд╛рд╖рд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред

рд╡реИрд╕реЗ рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ +1 рдЬреЛрдбрд╝рдирд╛, рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ...

рдореИрдВ рдЕрдм рднреА рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╕реА # рдореЗрдВ рдпрд╣ рд╣реИ, рдФрд░ рдпрд╣ рдХрдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЭрдВрдбреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдирд┐рдЬреА/рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рдпрд╣ рдПрдХ рддрдорд╛рд╢рд╛ рд╣реИ рдХрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рд╣реИ: рдЗрд╕рд╕реЗ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ) рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рд╣реЛрдЧреАред рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдХ рдЕрдЪреНрдЫреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЧреЗрдЯрд░реНрд╕ рдпрд╛ рд╕реЗрдЯрд░реНрд╕ рддрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реИред рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдХрд╛ рдХреЛрдИ рдорд╣рддреНрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрд░рд╛рди рдерд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ TS... +1 рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдХреЛрдИ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

private get x() { ... }
public set x(value) { ... }

рдЗрдореЛ рдЕрдЧрд░ рдЖрдк рдЕрдВрдЧреНрд░реЗрдЬреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрддреНрдо-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдирд┐рдЬреА (рд╕рдВрд░рдХреНрд╖рд┐рдд)/рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдЖрдк рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рддреЛ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВред

Ps рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: "рдЧреЗрдЯреНрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рджреГрд╢реНрдпрддрд╛ рдореЗрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ" - рдареАрдХ рд╣реИ: рдареАрдХ рдпрд╣реА рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдпрд╣рд╛рдВ рджреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:

Backbone.js, рдмрджрд╕реВрд░рдд .get() рдФрд░ .set() рдХреЙрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП:

class Whatever {
    public get rotation(): number {
        return this.get('rotation');
    }
    private set rotation(rotation: number) {
        this.set('rotation', rotation);
    }
}

рдЧреБрдг рдЬреЛ рдЙрдкрд╡рд░реНрдЧ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

class ExtendMe {
    public get someProperty(): string {
        // some stuff
    }
    protected set someProperty(prop: string) {
        // some stuff
    }
}

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рддрдм рд╕реЗ рдпрд╣ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВрдиреЗ рдЕрднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рд╛рдкреНрдд() рд╡рд┐рдзрд┐ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реБрдЖ рдХрд┐ рдореЗрд░рд╛ рд╕реЗрдЯ рдФрд░ рджреГрд╢реНрдпрддрд╛ рдкрд░ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реБрдП рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред "рд╕реА ++ рддрд░реАрдХрд╛" рдпрд╛рдж рд░рдЦрдирд╛ рдХрд┐ рдпрд╣ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ:

private _myAttribute: string;
get myAttribute(): string {...}
setMyAttribute(value: string) {...}

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдпрд╣рд╛рдВ рд╣реВрдВред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ myAttribute рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реЛ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд╣реА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рд╣рд░ рдмрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдХрд╕реНрдЯрдо рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?
рдпрд╣ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреНрдпреЛрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде, рдЖрджрд┐ ...

рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕реА # рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЯреАрдПрд╕ рдХреЛ рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╕реАрдорд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ "рд╕реА ++ рд╢реИрд▓реА" рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рддреЗ рд╣реИрдВред

"рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ" рдХрднреА рднреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░рд╛ +1 рдЬреЛрдбрд╝рдирд╛ред рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИ, рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИред рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред
+1

12 рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдИрдПрдордПрдЪрдУ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╕реНрдерд┐рддрд┐ рд╣реИ "рдареАрдХ рд╣реИ, рдореИрдВ рд╣рд░ рдмрд╛рд░ _property рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдирд┐рдЬреА рд╕реЗрдЯ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ"

рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдпрд╛ рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрд░ рдХреЛрдб рдореЗрдВ рдмрдбрд╝реА рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рдирд╛ (рдпрд╛рдж рд░рдЦрдирд╛, рдЕрдзрд┐рдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛ - рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдЪреАрдЬреЛрдВ рдХреА рдХрдо рдЧрддрд┐, рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп, рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛, рдЕрдВрдд рдореЗрдВ - рдХрдо рд▓рдЧрд╛рддрд╛рд░ рд░рд┐рд▓реАрдЬ) рд▓реЗрдХрд┐рди рд▓реЗрдЦрди рдХреЛ рдХрдо рдХрд░рдирд╛ 1 рдкреНрд░рддреАрдХ рдпрд╛ рд▓реЗрдЦрди рд╡рд╣ 1 рдкреНрд░рддреАрдХ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдкрдЯреЗрдВ ... рдореИрдВ рд╣рд░ рдмрд╛рд░ 1 рдкреНрд░рддреАрдХ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдЯреАрдПрд╕ рдХреЛрд░ рдореЗрдВ рдореЗрд░рд╛ рдХреЛрдИ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЪреАрдиреА рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдЦреБрдж рдХреЛ рдирд┐рдкрдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред

рдпрд╣ рдбреАрд▓рдмреНрд░реЗрдХрд░ рдирд╣реАрдВ рд╣реИ рджреЛрд╕реНрддреЛрдВред рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╣рд╕ рдФрд░ рдЬреНрдЮрд╛рди рд▓реЗрддрд╛ рд╣реИ (рдкрд░рд┐рдгрд╛рдо рд╕рдордЧреНрд░ рдХреЛрдб рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде), рдЗрд╕рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд▓рд╛рдо рдФрд░ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

(рдкреАрдПрд╕ рдпрд╣рд╛рдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ - рдЕрдВрдд рдореЗрдВ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рдФрд░ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред_property = ...
рдФрд░ рдлрд┐рд░ рднреА рдЦреБрд╢ рд░рд╣реЗрдВрдЧреЗ)

@idchlife set рд╕рдВрдкрддреНрддрд┐ рд▓рдХреНрд╖реНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк set рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

+1 рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдмрд╣реБрдд рдЕрдЬреАрдм рдЖрдкрдХрд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ "рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рджреЗрдЧрд╛" рдЬрдм рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░рддреА рд╣реИрдВред

рдЪреВрдВрдХрд┐ рд╕рднреА s рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╕реНрдкреИрдо рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реЛрдЧреА рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣рд┐рдд рдмрд╣реБрдд рд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрднреА рднреА рдХреБрдЫ рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдЖрд▓рд╕реА рдкреБрд▓рд┐рд╕-рдЖрдЙрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЬреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рддреЛ рдЗрд╕ рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░реЗрдВ рди рдХрд┐ рдЗрддрдиреЗ рдЬрдЯрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЬреЛрдЦрд┐рдо рднрд░реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВред

рдЕрднреА рднреА рд╡рд╛рдВрдЫрдиреАрдпред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реЗрдЯ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╢реНрдпрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реИред рдЕрдкрдорд╛рди рдореЗрдВ рдЪреЛрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ Microsoft рджреНрд╡рд╛рд░рд╛ C# рдХреА рддрд░рд╣ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

public string myPropertyWithLimitedAccess { get; private set; }   

рдЙрд╕ рдУрд░ рджреЗрдЦреЛред рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкрдардиреАрдп, рдФрд░ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВред

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

рд╕рдорд░реНрдерди рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ:

private _myProperty: string;

public get myProperty(): string { return this._myProperty; }
private set myProperty(value: string) { this._myProperty = value; }

рдЕрдЬреАрдм рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдореЗрдВ рдмреЛрдирд╕ рдЕрдВрдХ, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ .NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрднреНрдпрд╕реНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

+1
рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛!

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реА # рдХреЗ рдмрд╛рдж рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрд░реНрде рд╕реАрдорд╛ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдкрд░реЗрд╢рд╛рди рдХрд░рддреА рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред

рднрд╛рд╖рд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ readonly [P in keyof T]: T[P] рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ?

рдЯрдХреНрдХрд░ред рдпрд╣ рдлреАрдЪрд░ рд╣рд░ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдореБрджрд╛рдп рдХреЛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рднрд╛рд╖рд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ readonly [P in keyof T]: T[P] рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ?

рдЬрдЯрд┐рд▓рддрд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди IIRC RyanCavanaugh рдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдШреЛрд╖рдгрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реНрдХ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлреАрдЪрд░ рд╕реЗ рдХреМрди рд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛрдВрдЧреА рдФрд░ рдХреМрди рд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛрдВрдЧреАред рдкреВрд░реНрд╡ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЯреАрдПрд╕ рдЯреАрдо рдХрднреА-рдХрднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп "рдУрдПрдордЬреА рдЬрдЯрд┐рд▓рддрд╛" рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред (рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ nрд╡реАрдВ рдмрд╛рд░ рдкреНрд░рд╢реНрди x рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдХрдо рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред)

рдореИрдВ "рд╕рдореБрджрд╛рдп рдХреЛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП" рдХреА рдзрд╛рд░рдгрд╛ рд╕реЗ 100% рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдЯреНрд░реЗрдб-рдСрдл рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпреЛрдВ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдЯреАрдо рд╕реЗ рдПрдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреНрд░реЗрдб-рдСрдл 1000% рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реЛрдЧрд╛?

readonly рд╕рдВрд╢реЛрдзрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрдИ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрднреА рднреА рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╣реИред

рдореИрдВ рдЕрдХреНрд╕рд░ рд╕рдВрдкрддреНрддрд┐ readonly рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд╣ рд╢реЛрд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рд╕рдорд░реНрдерди рдХреНрд╖реЗрддреНрд░ + рдЧреБрдг рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реЛред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

// Option 1: C# style
public name: string { get; private set; }

// Option 2: Swift style
private(set) name: string

// Option 3: Swift struct-style
public readonly name: string

mutating changeName(name: string) {
  this.name = name
}

// Option 4: New keyword
public frozen name1: string
public readonly name2: string

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 2 рдкрд╕рдВрдж рд╣реИ, рдЖрдИрдПрдордУ рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред

рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЗрд╡рд▓ mutating . рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реАрд▓реНрдб рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ

рд╡рд┐рдХрд▓реНрдк 4 рдХреЗ рд╕рд╛рде, frozen рдХреЛ рдХреЗрд╡рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, readonly рдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдХрдХреНрд╖рд╛ рдпрд╛ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рд╕рдВрд╢реЛрдзрдХ рдкрд░ @yvbeek рдХреЗ рд╡рд┐рдЪрд╛рд░ https://github.com/microsoft/TypeScript/issues/37487 рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИрдВред

рдпрд╣ рдореБрджреНрджрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдкрд╡реЛрдЯ рд╣реИрдВ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рджреЗрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рдФрд░ рд╣рдо # 37487 рдореЗрдВ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдореМрдЬреВрджрд╛ рд╕реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдХрднреА рднреА рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪреАрдЬ рд╣реЛрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреА рд╣реИ)

рдореИрдВ "рд╕рдореБрджрд╛рдп рдХреЛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП" рдХреА рдзрд╛рд░рдгрд╛ рд╕реЗ 100% рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдЯреНрд░реЗрдб-рдСрдл рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпреЛрдВ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдЯреАрдо рд╕реЗ рдПрдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

@snarfblam рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рди рд╣реЛрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд░реНрдж рд╣реИ рдФрд░ (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдиреЗ рдореБрдЭреЗ TS/NodeJS рд╕реЗ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ ... рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдпрд╣ рд╕рдм рдареАрдХ рд╣реИ рдФрд░ рдмрд╛рдВрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдХрдИ рдмрд╛рд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб) тАЛтАЛрдФрд░ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдореЙрдбрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ "рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП" рд▓рдбрд╝рдХреЗ"ред

рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реЛ, рд▓реЗрдХрд┐рди рдЕрдВрджрд░ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ ... рдФрд░ JSON рдХреЛ рдХреНрд░рдордмрджреНрдз рднреАред рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реБрдкреНрд╕ред

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ _Optional chaining_ рдХреЗ рд╕рдорд╛рди рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреА рд╣реИред рд▓реЛрдЧ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрд╖реЛрдВ рддрдХ рдорд╛рдВрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред

рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛ рд▓реЗрдВрдЧреЗред

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рднрд╛рд╖рд╛ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдХрд┐рдд рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рддрдиреА рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕реА # рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛:

export class I18nService {
  private static ref: I18nService;

  public static get instance(): I18nService {
    if (!I18nService.ref) {
      I18nService.ref = new I18nService();
    }

    return I18nService.ref;
  }
}

рдЯрд╛рдЗрдк рдПрд░рд░ рдЬреИрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ:

Property 'foo' is writable only in protected scope within class 'Blah' and its subclasses.

рдпрд╛

Property 'foo' is readable only in protected scope within class 'Blah' and its subclasses.

рдЖрджрд┐, рдФрд░ private рдХреЗ рд╕рдорд╛рдиред

рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдФрд░ рдореИрдВ рдЗрд╕ рдмреАрдЪ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╣реИрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

// somewhere.ts
declare global {
    type Writable<T> = { -readonly [P in keyof T]: T[P]; }
}

// example.ts
class Example {

    public readonly prop: number;

    public doSomething(n: number): void {
        (this as Writable<this>).prop = n;
    }
}

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдЬрдЧрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдФрд░ рдореИрдВ рдЗрд╕ рдмреАрдЪ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╣реИрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ "рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

bgrieder picture bgrieder  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

weswigham picture weswigham  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MartynasZilinskas picture MartynasZilinskas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wmaurer picture wmaurer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

uber5001 picture uber5001  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ