Typescript: рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХреАрд╡рд░реНрдб рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдлрд╝рд░ре░ 2015  ┬╖  210рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

(рдЕрдкрдбреЗрдЯ @RyanCavanuagh рджреНрд╡рд╛рд░рд╛)

рдХреГрдкрдпрд╛ "рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ", "рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЕрднреА рдЬреЛрдбрд╝реЗрдВ", рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦреЗрдВред рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдереНрд░реЗрдб рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЙрдЪрд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдВрдЧреАред


(рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдЕрдВрдХ #1524 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ _not_ рд╣реИред рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реА ++ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреА рддрд░реНрдЬ рдкрд░ рдЕрдзрд┐рдХ рд╣реИ, рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)

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

рдлрд┐рд░ рд╕реЗ C++ рдХреЗ рд╕рдорд╛рди, _рдпрд╣ рдХрд┐рд╕реА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐_ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╕реЗ рдЬреБрдбрд╝реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХрд▓рди рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ untyped рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдУрд╡рд░рд░рд╛рдЗрдб рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

class Animal {
    move(meters:number):void {
    }
}

class Snake extends Animal {
    override move(meters:number):void {
    }
}

рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐

// Add an additional param to move, unaware that the intent was 
// to override a specific signature in the base class
class Snake extends Animal {
    override move(meters:number, height:number):void {
    }
}
// COMPILE ERROR: Snake super does not define move(meters:number,height:number):void

// Rename the function in the base class, unaware that a derived class
// existed that was overriding the same method and hence it needs renaming as well
class Animal {
    megamove(meters:number):void {
    }
}
// COMPILE ERROR: Snake super does not define move(meters:number):void

// Require the function to now return a bool, unaware that a derived class
// existed that was still using void, and hence it needs updating
class Animal {
    move(meters:number):bool {
    }
}
// COMPILE ERROR: Snake super does not define move(meters:number):void

IntelliSense

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

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд IntelliSense рддрдВрддреНрд░

рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рднреАрддрд░:

  1. рдУрд╡рд░рд░рд╛рдЗрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ
  2. рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реБрдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдбреНрд░реЙрдк рдбрд╛рдЙрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
  3. рдбреНрд░реЙрдк рдбрд╛рдЙрди рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  4. рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
Add a Flag Revisit Suggestion

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

рдХреГрдкрдпрд╛ рд░реЛрдирд╛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рддрд░реНрдХ public рдХреАрд╡рд░реНрдб рдкрд░ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рджреБрдирд┐рдпрд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ abstract рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ override рдХреАрд╡рд░реНрдб рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ, рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдФрд░ рдХрдо рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

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

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИрдВ:

class Snake extends Animal {
    override move(meters:number, height=-1):void {
    }
}
class A {...}
class Animal {
    setA(a: A): void {...}
    getA(): A {...}
}

class B extends A {...}
class Snake extends Animal {
    override setA(a: B): void {...}
    override getA(): B {...}
}

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЛ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдЬреЛрдбрд╝реВрдВрдЧрд╛ (рдпрд╛ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред
рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╕рдордп рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдЖрд╣ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдгред рдЖрдо рддреМрд░ рдкрд░ рдореИрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ _exact_ рдорд┐рд▓рд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рдЦреНрдд рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИред рддреЛ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рдо рдЬреЛрдбрд╝рдирд╛ред рдпрд╣ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛: рд╕рд╛рдВрдк рд╕реБрдкрд░ рдЪрд╛рд▓ (рдореАрдЯрд░: рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рд╢реВрдиреНрдпред рдЬрдмрдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рд╣реИ, рдПрдирд┐рдорд▓.рдореВрд╡ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдКрдВрдЪрд╛рдИ рдореЗрдВ рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдмреЗрд╕ рдПрдкреАрдЖрдИ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
  2. рдпрд╣ (рдФрд░ рд╣рдореЗрд╢рд╛ рдЪрд╛рд╣рд┐рдП) рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class C extends A {...}
var animal : Animal = new Snake();
animal.setA(new C());
// This will have undefined run-time behavior, as C will be interpreted as type B in Snake.setA

рддреЛ рдЙрджрд╛рд╣рд░рдг (2.) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рд╛рди рдбреЗрдореЛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕реВрдХреНрд╖реНрдо рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЫреВрдЯ рдЬрд╛рдПрдЧрд╛! :)

рдФрд░ рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрд░ рджреВрдВрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рд┐рдд/рдЙрдиреНрдирдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ ... рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реБрдкрд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрдореА рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

class Snake extends Animal {
    move(meters:number, height?:number):void {
         super.move; // override fix
    }
}

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

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

@rwyborn
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рдПрдХ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд░реАрдбрд┐рдмрд┐рд▓реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ (рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЕрдиреБрд░реЛрдз)ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЯреАрдПрд╕ рдЕрдорд╛рдиреНрдп рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рднреА)ред
рдЖрдо рддреМрд░ рдкрд░:

class Snake extends Animal {
    move(meters:number, height:number):void {}
}

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

@stephanedr , рдПрдХ рдПрдХрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рд╣рдореЗрд╢рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреЗ рднреАрддрд░ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ (рднрд▓реЗ рд╣реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ !!)

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

@rwyborn рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕реА ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдареАрдХ рдЗрд╕реА рддрд░рд╣ рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рдереА рдХрд┐ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдЬрд┐рд╕рдиреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рд╡рд╣ рдореЗрд░реА рдкреБрд╕реНрддрдХ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдПрдЧрд╛ред

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

class Base {
    protected commitState() : void {

    }
}


class Implementation extends Base {
    override protected comitState() : void {   /// error - 'comitState' doesn't exist on base type

    }
}

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

рд╕реБрдЭрд╛рд╡ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреАред

рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЬрд┐рддрдирд╛ рднреНрд░рдо рджреВрд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИред 5 рд╡рд┐рдзрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 3 рдХреЛ override рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдиреНрдп 2 _aren't_ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХреЛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХреГрдкрдпрд╛ рд░реЛрдирд╛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рддрд░реНрдХ public рдХреАрд╡рд░реНрдб рдкрд░ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рджреБрдирд┐рдпрд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ abstract рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ override рдХреАрд╡рд░реНрдб рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ, рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдФрд░ рдХрдо рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

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

рдореИрдВ @hdachev рдХреЗ рд╕рд╛рде 100% рд╕рд╣рдордд рд╣реВрдВ, @RyanCavanaugh рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдЫреЛрдЯреА рдЕрд╕рдВрдЧрддрддрд╛ рдХреЛ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдЬрд╛рдВрдЪ рд▓рд╛рдиреЗ рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд╛рднреЛрдВ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рддреМрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕реА ++ рд╡реИрдХрд▓реНрдкрд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рдХрд┐ рдЬрдЯрд┐рд▓ рдУрдУ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдЪреЗрдХрд┐рдВрдЧ рдореЗрдВ рдХрд┐рддрдирд╛ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдХрд┐рд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреАрд╡рд░реНрдб рдХреА рдЕрд╕рдВрдЧрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рддреЛ C# рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ "рдирдпрд╛" рдпрд╛ "рдУрд╡рд░рд░рд╛рдЗрдб" рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЙрдкрдпреЛрдЧ рд╣реИ:

class Dervied extends Base {

    new FuncA(newParam) {} // "new" says that I am implementing a new version of FuncA() with a different signature to the base class version

    override FuncB() {} // "override" says that I am implementing exactly the same signature as the base class version

    FuncC() {} // If FuncC exists in the base class then this is a compile error. I must either use the override keyword (I am matching the signature) or the new keyword (I am changing the signature)
}

рдпрд╣ public рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдирд╛ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ; override рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд┐рдзрд┐ _not_ рдЧреИрд░-рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИред

рдпрд╣рд╛рдВ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ (рдЯреАрдПрд╕1.5 рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдирдЯрд╛рдЗрдо-рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

/* Put this in a helper library somewhere */
function override(container, key, other1) {
    var baseType = Object.getPrototypeOf(container);
    if(typeof baseType[key] !== 'function') {
        throw new Error('Method ' + key + ' of ' + container.constructor.name + ' does not override any base class method');
    }
}

/* User code */
class Base {
    public baseMethod() {
        console.log('Base says hello');
    }
}

class Derived extends Base {
    // Works
    <strong i="9">@override</strong>
    public baseMethod() {
        console.log('Derived says hello');
    }

    // Causes exception
    <strong i="10">@override</strong>
    public notAnOverride() {
        console.log('hello world');
    }
}

рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:

рддреНрд░реБрдЯрд┐: рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рд╕реА рднреА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдордп рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рдЖрдкрдХрд╛ рдХреЛрдб рд▓реЛрдб рд╣реЛрддреЗ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЖрдк override рдХреЗ "рддреЗрдЬрд╝" рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рдЙрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@RyanCavanaugh рддреЛ рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.6 рдкрд░ рд╣реИрдВ рдФрд░ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдЕрднреА рднреА рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрддреНрдкрд╛рджрди рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ "рдУрд╡рд░рд░рд╛рдЗрдб" рдХреАрд╡рд░реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ; рдХреБрдЫ рдирд╛рдо рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ, рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕реА #, рд╕реА ++ рдФрд░ рдПрдл #ред рдпреЗ рд╕рднреА рднрд╛рд╖рд╛рдПрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЧрдИ рдЫреЛрдЯреА-рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд▓рд╛рдн рдЗрди рдорд╛рдореВрд▓реА рдореБрджреНрджреЛрдВ рдХрд╛ рд╡рдЬрди рдХрд░рддреЗ рд╣реИрдВред

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

рдпрд╣ рдХреЗрд╡рд▓ рд▓рд╛рдЧрдд/рд▓рд╛рдн рдХрд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд░рдпрд╛рди рдиреЗ рд╕рдордЭрд╛рдпрд╛, рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдзрд┐ _is't_ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реИред рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ override рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛)ред

@DanielRosenwasser рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, C++ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ (рдмрд┐рд▓реНрдХреБрд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд) рдлрд┐рд░ рднреА рд╣рд░ рдХреЛрдИ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдмрдбрд╝реЗ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

class Base {
    method(param: number): void { }
}

class DerivedA extends Base {
    // I want to *exactly* implement method with the same signature
    override method(param: number): void {}
}

class DerivedB extends Base {
    // I want to implement method, but support an extended signature
    method(param: number, extraParam: any): void {}
}

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

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ "рдУрд╡рд░рд░рд╛рдЗрдб" рдХреА рд╢рд╛рдмреНрджрд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд░ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ "рдмрд┐рд▓реНрдХреБрд▓_рдореИрдЪ_рд╕рд┐рдЧреНрдиреЗрдЪрд░_рдСрдл_рд╕реБрдкрд░рдХреНрд▓рд╛рд╕_рдореЗрдереЛрдб" рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ :)

class DerivedA extends Base {
    exactly_match_signature_of_superclass_method method(param: number): void {}
}

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

+1, рдЯреВрд▓рд┐рдВрдЧ рднреА рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рдПрдЧреАред рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ ComponentLifecycle рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреА:

``` рд╕реА#
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдХрдЬреАрд╡рдирдЪрдХреНрд░

{
рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓рдорд╛рдЙрдВрдЯ? (): рд╢реВрдиреНрдп;
рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдорд╛рдЙрдВрдЯ? (): рд╢реВрдиреНрдп;
рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓ рд░рд┐рд╕реАрд╡рдкреНрд░реЙрдкреНрд╕? (рдиреЗрдХреНрд╕реНрдЯрдкреНрд░реЙрдкреНрд╕: рдкреА, рдиреЗрдХреНрд╕реНрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ: рдХреЛрдИ рднреА): рд╢реВрдиреНрдп;
shouldComponentUpdate? (рдЕрдЧрд▓рд╛рдкреНрд░реЙрдкреНрд╕: рдкреА, рдиреЗрдХреНрд╕реНрдЯрд╕реНрдЯреЗрдЯ: рдПрд╕, рдиреЗрдХреНрд╕реНрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ: рдХреЛрдИ рднреА): рдмреВрд▓рд┐рдпрди;
рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓рдЕрдкрдбреЗрдЯ? (рдиреЗрдХреНрд╕реНрдЯрдкреНрд░реЙрдкреНрд╕: рдкреА, рдиреЗрдХреНрд╕реНрдЯрд╕реНрдЯреЗрдЯ: рдПрд╕, рдиреЗрдХреНрд╕реНрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ: рдХреЛрдИ рднреА): рд╢реВрдиреНрдп;
рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдЕрдкрдбреЗрдЯ? (рдкрд┐рдЫрд▓рд╛ рдкреНрд░реЙрдкреНрд╕: рдкреА, рдкреНрд░реАрд╡рд╕реНрдЯреЗрдЯ: рдПрд╕, рдкреНрд░реАрд╡ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ: рдХреЛрдИ рднреА): рд╢реВрдиреНрдп;
рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓рдЕрдирдорд╛рдЙрдВрдЯ? (): рд╢реВрдиреНрдп;
}

With override, or other equivalent solution,you'll get a nice auto-completion. 

One problem however is that I will need to override interface methods...

``` C#
export default class MyControlextends React.Component<{},[}> {
    override /*I want intellisense here*/ componentWillUpdate(nextProps, nextState, nextContext): void {

    }
}

@olmobrutall рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ "рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдпрд╛ рдмреЗрд╣рддрд░ рдкреВрд░реНрдгрддрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдХрд░ред

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

рд╕реА ++ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ, https://msdn.microsoft.com/en-us/library/jj678987.aspx

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

рджреВрд░ рдФрд░ рджреВрд░ рддрдХ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЬреАрдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд░рд╣реА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдиреАрдЪреЗ рдХрд╣реАрдВ рднреА рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реИред рд╣рдорд╛рд░реА рдЯреАрдореЛрдВ рдореЗрдВ рдПрдХ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдЧрд▓рдд рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред

рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмреЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реЗ рдПрдЬреЗрдВрдбрд╛ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рд╣реЛрдиреЗ рд╕реЗ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╖рдорддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдХреЛрдИ рд╡рд░реНрдЧ-рд╕реНрддрд░реАрдп рдХреЙрдиреНрд╕ рдЧреБрдг рдирд╣реАрдВ рд╣реИрдВред

@RyanCavanaugh рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рднрд╛рд╖рд╛рдПрдВ рдХрд░рддреА рд╣реИрдВ, рдХреАрд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ рдХрд┐ рд╕рд╣реА рд╕рдордп рдХрдм рд╣реИред

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

рдФрд░ рдЬрдмрдХрд┐ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рджрд░реНрдж рдмрд┐рдВрджреБ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдвреВрдВрдврдирд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рд╕реВрдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЖрдзрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рддрд╛ рд╣реИ рдпрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓рддрд╛ рд╣реИред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рд╡реЗ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдВрдЧреЗ :)

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

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдХрд╕реНрдЯрдо tslint рдирд┐рдпрдо рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рд░рдпрд╛рди рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрдм рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдореБрдЭреЗ 'рдУрд╡рд░рд░рд╛рдЗрдб' рдХреАрд╡рд░реНрдб рдХреА рднреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рд╣реБрдИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐ рдирд╛рдо рдмрджрд▓ рджрд┐рдП рдФрд░ рдореИрдВ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдирд╛рдореЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдХреБрдЫ рдмрдЧ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдереА, рддреЛ рд╣рдо рдЗрди рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ @RyanCavanaugh рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдХреАрд╡рд░реНрдб рд╕рд┐рд░реНрдл рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреАрд╡рд░реНрдб рд╣реИ, рддреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддреА рд╣реИред рддреЛ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tsc рдореЗрдВ рдХреБрдЫ рдЭрдВрдбрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП?

рдХреГрдкрдпрд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ....

рдореЗрд░реЗ рд▓рд┐рдП, рдпрджрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдЙрдкрдпреЛрдЧреА рд╣реЛрдирд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдпрд╣ рд╕реА # рдореЗрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реА # рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк _must_ рдЗрд╕реЗ рдпрд╛ рддреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдпрд╛ рдирдпрд╛ рд▓реЗрдмрд▓ рдХрд░рддреЗ рд╣реИрдВред

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕ рдХрдбрд╝реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рд╕рдХреНрд╖рдо" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВред

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

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

рд╕рднреА +1ers рдХреЗ рд▓рд┐рдП -- рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

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

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

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

@RyanCavanaugh рдХреБрдЫ рдореБрджреНрджреЗ рдЬреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ:

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

рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрд░реНрдХ рд╕реВрдЪреА рдФрд░ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА override рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирдП рдирд┐рдпрдо рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ

рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирдП рдирд┐рдпрдо рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд╣рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЧреВрдврд╝ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдмрдбрд╝реЗ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп (рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде) рдпрд╣ рдПрдХ _рд╣рд░ рджрд┐рди_ рдШрдЯрдирд╛ рд╣реИ, рдпрд╛рдиреА рдХрд┐рд╕реА рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЕрдиреБрдмрдВрдз рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ), рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЪреЗрдд рдХрд░реЗ рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдЬреЛ рдЕрдм рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред

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

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

рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХрд╕реНрдЯрдо tslint
рдирд┐рдпрдо, рд▓реЗрдХрд┐рди рдЯреВрд▓реАрдВрдЧ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдФрд░ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛
рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреАрд╡рд░реНрдб рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ред

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

рдмреБрдзрд╡рд╛рд░, 23 рдорд╛рд░реНрдЪ 2016 рдХреЛ 21:31 рдмрдЬреЗ, рд░реЛрд╡рди рд╡рд╛рдпрдмреЛрд░реНрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рд╣рдо
рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

@RyanCavanaugh https://github.com/RyanCavanaugh рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж
рдХреАрд╡рд░реНрдб рдХреЗ рдЖрд╢рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднрд┐рдиреНрди рдкреГрд╖реНрда рдкрд░ рд╣реЛрдВред рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ
рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рдирддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕
рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЧрд╣рд░рд╛ рдЬрдЯрд┐рд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИ
рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдкрд░ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрдмрдВрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ _exactly_ рдЙрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЬреЛрдбрд╝ рдХрд░
рд╕рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб, рдЖрдк рд╣реИрдВ
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рддрд░реНрдХ рдЬрд╣рд╛рдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдиреБрдмрдВрдз рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд╣рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЧреВрдврд╝ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдП рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп
рдмрдбрд╝реЗ рдХреЛрдб рдЖрдзрд╛рд░ (рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде) рдпрд╣ рдПрдХ _every . рд╣реИ
рджрд┐рди_ рдШрдЯрдирд╛, рдпрд╛рдиреА рдХрд┐рд╕реА рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
рд╡рд░реНрдЧ (рдЕрдиреБрдмрдВрдз рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ), рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЪреЗрдд рдХрд░реЗ
рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдЬреЛ рдЕрдм рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -200551774

@kungfusheep fwiw рд╕рдВрдХрд▓рдХ рдХреЗрд╡рд▓ рдЕрд╡реИрдз рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдШреЛрд╖рд┐рдд рдкреИрд░рд╛ рдХреЗ рдмреАрдЪ рд╕реАрдзрд╛ рд╕рдВрдШрд░реНрд╖ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ _not_ рдкреИрд░рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рди рд╣реА рдпрд╣ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рд╡реЗ рд╣реИрдВ рдЬреЛ рдХреЛрдИ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╕реНрд╡рд┐рдЪ рдСрди рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ _add_ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЛ рд╕рд╣реА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╣рдЯрд╛рдирд╛ _toallyValid_ рд╣реИ:

class BaseEventHandler {
  handleEvent(e: EventArgs, timestamp: number) { }
}

class DerivedEventHandler extends BaseEventHandler {
  handleEvent(e: EventArgs) {
    // I don't need timestamp, it's OK
  }
}

рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдирд╛ рднреА _toallyValid_ рд╣реИ:

class Base {
  specialClone(): Base { ... }
}
class Derived extends Base {
  specialClone(): Derived { ... }
}

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

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

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

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

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

рдареАрдХ рд╣реИ, рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рдВрдХрд▓рдХ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрдо рд╕реЗ рдХрдо 'рд╕реБрд░рдХреНрд╖рд┐рдд' рд╣реИ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдмрд╛рддрдЪреАрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ рд╕рд╣рдорддред рдЕрдЧрд░ рдореБрдЭреЗ рдЪреБрдирдирд╛ рдкрдбрд╝реЗ, рддреЛ рд▓рд╛рдкрддрд╛-рдУрд╡рд░рд░рд╛рдЗрдб/рдЕрд╡реИрдз рдУрд╡рд░рд░рд╛рдЗрдб рд╕реНрдерд┐рддрд┐ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╛рд░реНрдЯреА рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рди рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░, рдЕрдиреНрдпрдерд╛ рд╣рдо рд╕рднреА рд╕рд╛рджреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд╛рде рд╣реА, рдЗрддрдиреА рд╕рд╛рд░реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдорд╛рдирдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХреНрд╕/рдХреНрд▓рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред
рдХреНрдпрд╛ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдореЗрдВ override рдХреАрд╡рд░реНрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдЯреАрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЪрд░реНрдЪрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ override рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ override рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддрдереНрдп рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛред

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ, рдпрд╛ рддреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдФрд░/рдпрд╛ рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ override рдЪрд┐рд╣реНрдирд┐рдд _at рдХрдо рд╕реЗ рдХрдо рдПрдХ_ рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рд╣рд╡рд╛ рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИ?

рд╢реБрдХреНрд░, 8 рдЕрдкреНрд░реИрд▓ 2016 рдХреЛ 14:38 рдмрдЬреЗ, рдкреАрдЯрд░ рдкрд╛рд▓реЛрдЯрд╛рд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ
рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐ рд╕рднреА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ, рдЬреЛ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рд╣реИ
'рдУрд╡рд░рд░рд╛рдЗрдб' рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ, рдпрд╛ рддреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдФрд░/рдпрд╛ рдпрджрд┐ рд╡рд╣рд╛рдБ рд╣реИ рддреЛ
рдХрдо рд╕реЗ рдХрдо 'рдПрдХ' рд╡рд┐рдзрд┐ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛ рд╣реИрдВ
рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -207434898

рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЛ! рдореБрдЭреЗ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╣рд╛рдБ - рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ!

рдХреНрдпрд╛ ES7 рдХреЛ рдЗрд╕ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ/рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рдорд╛рди рд╣реИрдВ
рдирд╛рдо?
8 рдЕрдкреНрд░реИрд▓ 2016 рдХреЛ рд╕реБрдмрд╣ 10:56 рдмрдЬреЗ, "рдЕрд░рд╛рдо рддреИрдпрдм" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдБ, рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ!

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -2074666464

+1 - рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИред

рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ "рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ" рдЬреИрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЯрд╛рдЗрдкреЛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ 20 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╕реЗ рдмрдЧ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рд╕реВрдХреНрд╖реНрдо рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

5 рд╡рд┐рдзрд┐рдпреЛрдВ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ 3 рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдиреНрдп 2 рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реИрдВред рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХреЛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрджрд┐ рдпрд╣ рдкреНрд░рдореБрдЦ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рддреЛ рдХреАрд╡рд░реНрдб check_override рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдВ _not overridden_ тАЛтАЛрдХреЗ рдмрдЬрд╛рдп _not check_ рд╣реИрдВред

implements. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛:

class MyComponent extends React.Component<MyComponentProps, void>{
    implements.componentWillMount(){
        //do my stuff
    }
}

рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ:

  • рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • implements. рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж IDE рдХреЗ рдкрд╛рд╕ рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ рдкреЙрдкрдЕрдк рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╡рд╕рд░ рд╣реИред
  • рдХреАрд╡рд░реНрдб рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдореВрд░реНрдд рддрд░реАрдХреЛрдВ рдкрд░ рдЬрд╛рдВрдЪ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ:
class MyComponent<MyComponentProps, MyComponentState> {
    implements.state = {/*auto-completion for MyComponentState here*/};

    implements.componentWillMount(){
        //do my stuff
    }
}

рдиреЛрдЯ: рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо base. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕реЙрд░реНрдЯрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд (рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдХреЙрд▓рд┐рдВрдЧ?) рдЙрджрд╛рд╣рд░рдг:

class MyComponent<MyComponentProps, MyComponentState> {
    base.state = {/*auto-completion for MyComponentState here*/};

    base.componentWillMount(){ //DEFINING
        //do my stuff
        base.componentWillMount(); //CALLING
        //do other stuff
    }
}

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ implements рд╕рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ
рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рдФрд░ рдирд╣реАрдВ рджреЗрддрд╛
рдПрдХ рдЖрдИрдбреАрдИ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ override рдпрд╛ рддреЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ
рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣рд╛рд╕рд┐рд▓ рдХрд░реЛред
рдмреБрдз, 13 рдЕрдкреНрд░реИрд▓ 2016 рдХреЛ 19:06 рдмрдЬреЗ, рдУрд▓реНрдореЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ред? рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛:

рд╡рд░реНрдЧ MyComponent React.Component рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ{
рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕.componentWillMount () {
// рдореЗрд░рд╛ рд╕рд╛рдорд╛рди рдХрд░реЛ
}
}

рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ:

  • рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рджред рдЖрдИрдбреАрдИ рдХреЗ рдкрд╛рд╕ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╡рд╕рд░ рд╣реИ
    рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рд╡рд┐рдзрд┐ред
  • рдХреАрд╡рд░реНрдб рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рд░ рдкрд░ рдЬрд╛рдБрдЪ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдЗрдВрдЯрд░рдлреЗрд╕ рднреАред
  • рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬреИрд╕реЗ
    рдпрд╣:

рд╡рд░реНрдЧ MyComponent{
рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕.рд╕реНрдЯреЗрдЯ = {/_ MyComponentState рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдпрд╣рд╛рдБ_/};

implements.componentWillMount(){
    //do my stuff
}

}

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -209571753

рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╣реА рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ:

  • рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдпрджрд┐ рд╡рд┐рдзрд┐ abstract рд╣реИред
  • рдлрд┐рд░ рдЖрдк рдХреБрдЫ virtual рдХреАрд╡рд░реНрдб рдХреЛ рдЙрди рддрд░реАрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдЯреАрдо рднрд╛рд╖рд╛ рдореЗрдВ рдЗрддрдирд╛ OO рд╕рд╛рдорд╛рди рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

implements. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореБрдЦреНрдп рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд▓реНрдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ: рдирдП рдХреАрд╡рд░реНрдб рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЧрдгрдирд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдФрд░ рд╕рдВрдХрд▓рди-рд╕рдордп рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд╛рдоред

рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ) рдпрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рднреА рд▓рд╛рдн рд╣реИред

рдереНрд░реЗрдб рдореЗрдВ override рдЕрдирд┐рд╡рд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИрдВред

virtual рдХреАрд╡рд░реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдЗрд╕рдХрд╛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реА ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧрд╛рд░реНрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ final рдХреАрд╡рд░реНрдб рд╣реЛрдЧрд╛ред

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

рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдо рдирдП рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ state рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛?

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

рдЧреБрд░реБ, 14 рдЕрдкреНрд░реИрд▓ 2016 рдХреЛ 11:58 рдмрдЬреЗ, рдУрд▓реНрдореЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдо рдирдП рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЬреНрдп
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -209879217

рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдБ рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдиреВрдареА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдУрд╡рд░рд░рд╛рдЗрдб" рдХрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред

рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред

рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдХреБрдЫ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдХреЛрдб рд╕рдВрдХреЗрдд/рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ рддреЛ рдРрд╕реЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд┐рдирд╛ рдЬреЛрдбрд╝реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдирдП рдХреАрд╡рд░реНрдбред

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

рдХреНрдпрд╛ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ override рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рд╕реЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВ?

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

рдпрджрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдиреБрдмрдВрдз рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдФрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ, рдФрд░ рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЯреНрд░рд┐рдкрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЯреАрдПрд╕ рдпрд╛ рдЯреВрд▓реАрдВрдЧ рдорджрдж рдХрд░ рд╕рдХреЗред

@armandn рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рдХрдореА рдпрд╛ рд╣рдорд╛рд░реЗ рд╕реБрдЭрд╛рд╡ рдХреА рдЕрдЪреНрдЫрд╛рдИ рд╡рд╣ рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди C# рдФрд░ TS рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмреАрдЪ рдЕрдВрддрд░:

рд╕реА # рдЖрдзрд╛рд░ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб:

  • override рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • VTable рдкрд░ рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддрд╛ рд╣реИ
  • рдЖрдзрд╛рд░ рдкрджреНрдзрддрд┐ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╕рд╛рд░/рдЖрднрд╛рд╕реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
  • рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ
  • рдЖрдИрдбреАрдИ: рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдд: рдкреВрд░реНрдг рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ

рд╕реА # рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

  • рдХреЛрдИ рдХреАрд╡рд░реНрдб рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИред
  • VTable рдореЗрдВ рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдБред
  • рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ
  • рдЖрдИрдбреАрдИ: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд┐рдХрдлрд╝рд┐рдХреНрд╕/рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВред

рддреЛ рдпрджрд┐ рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддреЗ рд╣реИрдВ рддреЛ рд╕реА # рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдореБрдЦреНрдп рддреАрди рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВ:

  1. рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╣реЛ рд░рд╣реА рд╣реИ
  2. рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ/рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд┐рдзрд┐ рдирд╛рдо рдореЗрдВ рдЧрд▓рдд рд╡рд░реНрддрдиреА)
  3. IDE рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ

рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 1) рдЯреАрдПрд╕ рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ 2) рдФрд░ 3) рдЧрд╛рдпрдм рд╣реИрдВред рдХрд╛рд░рдг override рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

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

рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 1) 2) рдФрд░ 3) _рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЯрд░рд▓реНрд╕_ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдирд╣реАрдВ рдЬреЛ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • 'рд╡рд┐рднрд╛рдЬрд┐рдд рджреБрдирд┐рдпрд╛' рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП _рдХреАрд╡рд░реНрдб_ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред (рдпрд╛рдиреА: check рдпрд╛ super. , рдпрд╛ MyInterface. )
  • abstract/virtual рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдмреЗрд╕ рдХреНрд▓рд╛рд╕/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕рджрд╕реНрдп рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред (рд▓рд╛рдн 2)
  • рд╕рдорд╛рди-рдкрд░реНрдпрд╛рдкреНрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ TS рдЕрдм рддрдХ рдХрд░ рд░рд╣рд╛ рд╣реИред (рд▓рд╛рдн 1)
  • IDE: рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред (рд▓рд╛рдн 3)

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХреА рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдпреЗ рджреЛрдиреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ*:

  • рдЗрд╕реЗ рдХреНрд▓рд╛рд╕реЗрд╕ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЯреАрдПрд╕ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • рдЗрд╕реЗ рдореЗрдердбреНрд╕ рдФрд░ рдлреАрд▓реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдердбреНрд╕ рд╕рд┐рд░реНрдл рдПрдХ рдлреАрд▓реНрдб рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдлрдВрдХреНрд╢рди рд╣реИрдВред

рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпреЗ рджреЛ рдмрд┐рдВрджреБ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:

``` рд╕реА#
рд╡рд░реНрдЧ MyComponent{
рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕.рд╕реНрдЯреЗрдЯ = {/ MyComponentState рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдХрдореНрдкреНрд▓реАрд╢рди рдпрд╣рд╛рдБ /};

implements.componentWillMount(){
    //do my stuff
}

}
```

@RyanCavanaugh рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдпрд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
  • рдпрд╣ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
  • рдЯреВрд▓реАрдВрдЧ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдЬрд╝рд▓рд┐рди рдЬреИрд╕реА рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдорд╛рдирддреЗ рд╣реБрдП, @override рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╕реВрдЪреА рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж QuickFix рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╣реА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк:

  • override componentWillMount() : рд╕рд╣рдЬ рд▓реЗрдХрд┐рди рднреНрд░рд╛рдордХред
  • check componentWillMount() : рд╕реНрдкрд╖реНрдЯ рд▓реЗрдХрд┐рди рдХреАрд╡рд░реНрдб-рдЙрдкрднреЛрдХреНрддрд╛ред
  • super componentWillMount() :
  • implements componentWillMount() :
  • super.componentWillMount() :
  • implements.componentWillMount() :
  • this.componentWillMount() :
  • ReactComponent.componentWillMount() :

рд░рд╛рдп?

@olmobrutall рдЕрдЪреНрдЫрд╛ рд╕рд╛рд░рд╛рдВрд╢ред рдЕрдВрдХ рдХреА рдЬреЛрдбрд╝реА:

рдПрдХ рдХреАрд╡рд░реНрдб рд╡рд┐рдХрд▓реНрдк (рд╕реА# рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдирдпрд╛ рд╣реЛрдЧрд╛ - рдПрдХ рдирдпрд╛ рд╕реНрд▓реЙрдЯ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛:

class MyComp extends React.Component<IProps,IState> {
...
    new componentWillMount() { ... }
    componentWillMount() { ...} // would compile, maybe unless strict mode is enabled
    new componentwillmount() { ... } <-- error

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

class Component<P,S> {
    extendable componentWillMount() {...}
}

рдпрд╣реА рдмрд╛рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрдЧреАред

рдзрдиреНрдпрд╡рд╛рдж :)

рд╕рд┐рд░реНрдл this рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

class MyComponent<MyComponentProps, MyComponentState> {
    this.state = {/*auto-completion for MyComponentState here*/};

    this.componentWillMount(){
        //do my stuff
    }
}

рд▓рдЧрднрдЧ extendable , TS 1.6 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА abstract рд╣реИ, рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╢рд╛рдпрдж рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рджреБрдирд┐рдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛ рдЬрд╛рдПрдЧреА?

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд▓реЗрдХрд┐рди рд╕реБрдкрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЧреИрд░-рдЖрднрд╛рд╕реА рд╕рджрд╕реНрдп рд╡рд░реНрдЪреБрдЕрд▓ рдирд╣реАрдВ рд╣реИрдВ - рдЬреЛ рднреНрд░рд╛рдордХ рд╣реИред

this. рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рд▓рдВрдмреЗ рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ):

   this.componentWillMount = () => { }

рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВред

рдХреНрдпрд╛ рдЪрд▓ рд░...

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ C# рдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдХрднреА рд░рд╣рд╛ рд╣реИред рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реБрдЭрд╛рдИ рдЧрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ C# рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рднрд┐рдиреНрди рд╣реИред рд░рдпрд╛рди рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдФрд░ рдлрд┐рд░ рдбреЗрдирд┐рдпрд▓ рдЖрд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдП рдЧрдП рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдереЗ:

рдЬреИрд╕рд╛ рдХрд┐ рд░рдпрд╛рди рдиреЗ рд╕рдордЭрд╛рдпрд╛, рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реИред рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛)ред

рдлрд┐рд░ рднреА рдЖрдк рдЕрднреА рднреА рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЬреВрдЭ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рд╕реБрдЭрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рдирдП рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

рддрдм рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдиреЗ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд░реБрдЪрд┐ рджрд┐рдЦрд╛рдИ рд╣реИ, рддреЛ рдЖрдЗрдП рдЙрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрдиреЗ рд░рд╣реЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирдП рдореБрджреНрджреЛрдВ рдХреЛ рдЙрдард╛рдПрдВред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ C# рдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдХрднреА рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реА # рд╕реЗ рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдорд╛рди рд░рд╣реЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рд╕реБрдЭрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рдирдП рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдк рдЗрд╕реЗ рддрдм рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреИрд╕реЗ рджреЗрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд░реНрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╛рдо рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХрдореНрдмреЛрдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рд╣реЛрдВрдЧреЗ рдЬрдм рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЬрдм рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдЕрд╡реИрдз рд░реВрдк рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереНрд░реЗрдб рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ред

рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд▓рд╛рдн 2 рдХреЗ рддрд╣рдд рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕реЗ рджреБрдирд┐рдпрд╛ рдХреА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд▓рд┐рдПред

рддреЛ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдПрдХ рдХрджрдо рдкреАрдЫреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрд╛рд░ рдореЗрдВ _рдПрдХ рдХрджрдо рдареАрдХ рдХрд░реЗрдВ рдФрд░ рд╕рдорд╛рди/рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред рдпрд╣ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рд╕реНрдХреНрд░рдо рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдирдХреЗ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реА # рдореЗрдВ рдХреБрдЫ рдбрд┐рдЬрд╝рд╛рдЗрди рдЧрд▓рддрд┐рдпрд╛рдБ рдкреВрд░реНрдгрддрд╛ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг:

  • рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд░рдгреА рд╕рд╣-рдкреНрд░рд╕рд░рдг / рдЕрдВрддрд░-рдкреНрд░рд╕рд░рдгред
  • var рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдореЗрдмрд▓ auto C++ рдХреА рддрд░рд╣ рдПрдХ рдмреЗрд╣рддрд░ рдХреАрд╡рд░реНрдб рд╣реЛрдЧрд╛?

рдмрд╕ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдк рддрд╕реНрд╡реАрд░ рдХреЗ рджреВрд╕рд░реА рддрд░рдл рджреЗрдЦреЗрдВрдЧреЗред

рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ _ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ _ рд╣реИрдВред рддреЛ рд╣рд╛рдБ, рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рд╕-рдЖрд░реНрдореА рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдирд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдкрдХреА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╣реИ, рддреЛ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА _now_ рд╣реИ рдЬреЛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 'рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ'ред

рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рд╣рдо рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ _рдЬрд╣рд╛рдВ рдореВрд▓ рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ_ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 1) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ undefined рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, 2) рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 3) рдмрд╛рд▓ рд╡рд░реНрдЧ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

@olmobrutall рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдПрдХ рд╕реНрдХреНрд░рдо рдмреЛрд░реНрдб рдирд╣реАрдВ рд╣реИ, рдереЛрдбрд╝рд╛ рдЖрддреНрдо-рд╕реЗрд╡рд╛рд░рдд рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдХрдо рдХреЗ рд╕реНрдкреЗрд╕ рдореЗрдВ TS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд╛рд░ рдЕрдкрдбреЗрдЯ рджреЗрдЦреЗ рд╣реИрдВред

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

рдореИрдВ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЯреАрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕/рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдкрдорд╛рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯреАрдПрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдорд╛рдирдХ рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдбрд░ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдБ TS C# рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ C++ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЛ рдЪреБрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рджреЗрд╢реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЙрд▓реНрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╕рд░рд▓ рдЙрддреНрддрд░ рдПрдХ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рд╣реИ, рдХрд╣рд╛рдиреА рдХрд╛ рдЕрдВрддред рдореЗрд░реЗ рдЬреИрд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдмреЗрдХрд╛рд░ рд╣реИред рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдВрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рджреБрд╡рд┐рдзрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдВрддрд░ рдПрдХ рдЕрд▓рдЧ рдмрд╛рддрдЪреАрдд рд╣реИред рдирдпрд╛ рдХреАрд╡рд░реНрдб рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ JS рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ TS рд╣рд╕реНрддрд╛рдХреНрд╖рд░-рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдВрдЧрд▓реНрдб рдирд╛рдо a'la C++ рдирд╣реАрдВ рдмрдирд╛рддрд╛, рдЬрд┐рд╕рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ)ред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдХрдо рдХреЗ рд╕реНрдкреЗрд╕ рдореЗрдВ TS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд╛рд░ рдЕрдкрдбреЗрдЯ рджреЗрдЦреЗ рд╣реИрдВред

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рддреЗрдЬ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдореИрдВ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣ рдЦреБрд╢ рд╣реВрдВ рдХрд┐ ES6 рдФрд░ TS рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреА, рднрд╛рд╖рд╛ рдХреЛ рдореГрдд рдЕрдВрдд рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВ override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдЙрдЪрд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдлрд╝реАрд▓реНрдб рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рдореИрдВ '_let's рдХреЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд░рд╣рдиреЗ рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╕реЛрдЪреЗ рдмрд┐рдирд╛ рдХрд░рддреА рд╣реИрдВ_' рддрд░реНрдХред

рд▓реЗрдХрд┐рди рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЛ рдЪреБрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рджреЗрд╢реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЙрд▓реНрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИред

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

рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд░рдЦреЗрдВ: рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдмрд┐рдирд╛ рдЬреНрдпрд╛рджрд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдореИрдВ, рдпрд╛ TSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ override рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреА рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╣реИ?

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

рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╣рд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреАрд╡рд░реНрдб рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ _intent_ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

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

рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд░рдЦреЗрдВ: рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдмрд┐рдирд╛ рдЬреНрдпрд╛рджрд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдореИрдВ, рдпрд╛ TSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреА рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╣реИ?

рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЕрдЧрд░ рд░рд┐рдПрдХреНрдЯ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдерд╛рд╣ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ рдХрд┐ override рдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдПрдХ рдЖрдЬрдорд╛рдИ рд╣реБрдИ рдФрд░ рдкрд░рдЦреА рд╣реБрдИ рддрдХрдиреАрдХ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдлрд▓ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдирд╣реАрдВ рд╣реИрдВ? BaseClass . рдХреА рдЗрди рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ

class BaseClass {
     abstract myMethod(); 
}
interface ISomeInterface {
     myMethod?(); 
}

class BaseClass extends ISomeInterface {
}

рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ:

``` рд╕реА#
рд╡рд░реНрдЧ рдХрдВрдХреНрд░реАрдЯрдХреНрд▓рд╛рд╕ {
myMethod рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ () {
// рдХрд╛рд░реНрдп рдХрд░рдирд╛
}
}

You think it should work in just one case and not in the other? The effect is going to be 100% identical in Javascript (creating a new method in ConcreteClass prototype), from the external interface and from the tooling perspective. 

Even more, maybe you want to capture `this` inside of the method, implementing it with a lambda (useful for React event handling). In this case you'll write something like this:

``` C#
class ConcreteClass {
    override myMethod = () => { 
         // Do stuff
    }
}

рдпрджрд┐ рд╡рд┐рдзрд┐ рд╕рд╛рд░ рд╣реИ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЖрддреА рд╣реИ рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛: рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ override рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЖрдЗрдП рдЗрд╕реЗ super. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рди рджреЗрдЦреЗрдВ (рдЕрднреА рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ)ред

``` рд╕реА#
рд╡рд░реНрдЧ рдХрдВрдХреНрд░реАрдЯрдХреНрд▓рд╛рд╕ {
super.myMethod () {// рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╡рд┐рдзрд┐
// рдХрд╛рд░реНрдп рдХрд░рдирд╛
}

super.myMethod = () => {  //method in lambda
     // Do stuff
}

}
```

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

рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╕рд┐рд░реНрдл рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЛрдгреАрдп рдХреЛ рджреЗрдЦреЛ:

рдмреЗрд╢рдХ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ, рди рд╣реА рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ?

рдореБрдЭреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП override ?

рд╣рдо рдПрдХ рдЖрдЬрдорд╛рдИ рд╣реБрдИ рдФрд░ рдкрд░рдЦреА рд╣реБрдИ рддрдХрдиреАрдХ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╣рд░ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдлрд▓ рд░рд╣реА рд╣реИред

рдЖрдкрдХреЗ рдорди рдореЗрдВ рдЬреЛ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рд╡реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ VTable рдореЗрдВ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рд░рд╛рд╕рдд рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╕рд┐рд░реНрдл рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ + рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рдд рд╣реИред рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рд╣реИрдВред

override рд╕реБрд╡рд┐рдзрд╛ рдХреЛ TS рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рджреЛ рдореВрд▓рднреВрдд рдЕрдВрддрд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреГрдкрдпрд╛ @kungfushiep рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╣реА рдХрд╣ рдЪреБрдХрд╛ рд╣реВрдВ, рдЙрд╕реЗ рдХрд╣рдиреЗ рдХрд╛ рдореИрдВ рдХреЛрдИ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред рд╡реЗ рдПрдХ рдЬреИрд╕реЗ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ TS devs RE рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗрдВ: рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдХреАрд╡рд░реНрдб - https://github.com/Microsoft/TypeScript/pull/6532#issuecomment -179563753 - рдЬреЛ рдХрд┐ рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдордЬрдмреВрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджреЗрдЦреЗрдВ:

class MyComponent extends React.Component<{ prop : number }, { value: string; }> {

    //assign a field defined in the base class without re-defining it (you want type-checking)
    assign state = { value : number}; 

    //optional method defined in an interface implemented by the base class    
    implement componentDidMount(){ 
    }

    //abstract method defined in the base class 
    override render(){  
    }
}

рдпрд╣ рд╡реАрдмреА рдпрд╛ рдХреЛрдмреЛрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдоред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдУрд╡рд░рд░рд╛рдЗрдб (рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ) рдХреАрд╡рд░реНрдб рдерд╛ред

interface IDo {
    do?() : void;
}
class Component implements IDo {
    protected commitState() : void {
        /// do something
    }
    override public do() : void {
        /// base implements 'do' in this case
    }
}

рдЕрдм рд╣рдордиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рджреЗрдВред

class MyComponent extends Component {
    override protected commitState(){
        /// do our own thing here
        super.commitState();
    }
    override do() : void {
        /// this is ambiguous. Am I implementing this from an interface or overriding a base method? I have no way of knowing. 
    }

}

рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ super рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

  override do() : void {
        super.do(); // this compiles, if it was an interface then super wouldn't support `do`
    }

рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА! рдпрд╛рдиреА рдбрд┐рдЬрд╛рдЗрди рдЧрд▓рдд рд╣реИред рд╕реНрдХрд┐рдорд┐рдВрдЧ рдХреЛрдб рд╕реЗ рдЬреБрдбрд╝реА рдХреЛрдИ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдм рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд╛рдореЛрдВ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд╛рди рд╣реИ рдФрд░ рдЖрдк do рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

MyComponent.prototype.do = function (){
    //your stuff
}

рдЖрдк рдЬреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ред

рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИред рдЖрдк рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрд╕реНрдкрд╖реНрдЯ рдХреАрд╡рд░реНрдб рдореЗрдВ рдХреЛрдИ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рджреЛ рдХреАрд╡рд░реНрдб рд╣реЛрдиреЗ рд╕реЗ рдХреМрди рд╕реА рддреНрд░реБрдЯрд┐ рдпрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛?

рдЪрд▓реЛ рдЕрдм рдпрд╛рд░ред рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЪрддреБрд░ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрднреА рдХрд╣рд╛ рд╣реИ "рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛"; рдХреНрдпрд╛ рд╣рдо рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрднреА-рдЕрднреА рд╣реБрдЖ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдпрд╣ рдореБрджреНрджрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рд╣реИ - рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдЕрдкрдиреА рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдпрд╣ рдореБрджреНрджрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рд╣реИ - рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдЕрдкрдиреА рдЪрд░реНрдЪрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рдХрд┐ рдЗрд╕ рдкрд░ рдХрд┐рддрдиреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд┐рд╕рд╕реЗ рдЖрддрд╛ рд╣реИред рдЖрдк рджреЛ рдмрд╣реБрдд рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореЗрдВ 1, 2 рдпрд╛ 3 рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ (...рд▓реЗрдХрд┐рди рджреЛрд╣рд░рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ)ред рддрдм рд╢рд╛рдпрдж рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реВрддреНрд░ рдореЗрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рд╡реИрд╕реЗ рднреА рд╕рдорд╛рди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ: P)ред

рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:

class MyComponent extends React.Component<{ prop : number }, { value: string; }> {

    //assign a field defined in the base class without re-defining it (you want type-checking)
    assign state = { value : number}; 

    //optional method defined in an interface implemented by the base class    
    implement componentDidMount(){ 
    }

    //abstract method defined in the base class 
    override render(){  
    }
}

assign , implement рдФрд░ override рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХрд╛рдо рди рдХрд░реЗрдВ: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдирд╛рдо рдореМрдЬреВрдж рд╣реИ (рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕, рдЖрдзрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд░реНрдЧ, рдЖрджрд┐ ...)

рдпрджрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА рдЪрд╛рд╣реЗ 1, 2 рдпрд╛ рдХреЛрдИ рдХреАрд╡рд░реНрдб рди рд╣реЛред

рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪреЗрдВ:

var mc = new MyComponent(); 
mc.state = null;
mc.componentDidMount =null;
mc.render = null;

рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдореИрдВ рдлрд╝реАрд▓реНрдб рдпрд╛ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рд╡реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕, рдбрд╛рдпрд░реЗрдХреНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЖрддреЗ рд╣реИрдВред

рдЕрд╕рд╛рдЗрди рди рдХрд░реЗрдВ, рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХрд╛рдо рдХрд░реЗрдВ: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдирд╛рдо рдореМрдЬреВрдж рд╣реИ (рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕, рдЖрджрд┐ ...)ред

рдЖрдкрдиреЗ рдЕрднреА рд╡рд╣рд╛рдВ 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдкреВрд░реЗ рджрд┐рди рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИрдВ рдФрд░ рдЖрдк рдЕрднреА рднреА рдмрд╣рд╕ рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЪрд░реНрдЪрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рд▓реЛрдЧ рдЕрднреА рднреА рдЗрд╕ рд╕рдордп рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

#6118 рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣рд╛рдВ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдпрд╣рд╛рдВ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ https://github.com/Microsoft/TypeScript/pull/6118 рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереАред рдпрд╣ рд╡рд┐рдЪрд╛рд░ override рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

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

рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐:

  • рд╕рджрд╕реНрдп рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд╛рд▓ рд╡рд░реНрдЧ рдкрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • рд╕рджрд╕реНрдп рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХрд░реЗрдЧрд╛ред

рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ (Ctrl + Space) рд▓рд┐рдЦрддреЗ рд╕рдордп рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдИрдПрдордУ рд╣реЛрдЧрд╛ред рдЬрдм рдХрд░реНрд╕рд░ рд╕реАрдзреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдмрд╣реБрдд рдЖрдХреНрд░рд╛рдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@RyanCavanaugh рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЬрд┐рддрдирд╛ рднреНрд░рдо рджреВрд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИред 5 рд╡рд┐рдзрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 3 рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдиреНрдп 2 рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рд╣реИрдВред рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХреЛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХрд┐рд╕реА рдЪрд░ рдХреЛ any рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЪрд░ рднреА any рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЯ --no-implicit-any рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рд░реВрдк рд╕реЗ --no-implicit-override рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЪрд╛рд▓реВ рдХрд░ рджреВрдВрдЧрд╛ред

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

рд╕рднреА +1ers рдХреЗ рд▓рд┐рдП -- рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рд╕реЗ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдЗрд╕рдХреЗ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ: 1) рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдУрд╡рд░рд╣реЗрдб рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдирд╛ рднреА рдЫреЛрдЯрд╛ рдХреНрдпреЛрдВ рди рд╣реЛ; 2) рдпрд╣ рдПрдХ рд╕рдВрдХрд▓рди рд╕рдордп рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИ; 3) рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛; 4) рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рдирдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдЧреБрдо рд╣реИред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рддреАрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ ChildA , ChildB , Base ред рдореИрдВрдиреЗ doSomething() рд╕реЗ ChildA рдФрд░ ChildB рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рд╣реИред рдХреБрдЫ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдП рд╣реИрдВ, рдФрд░ doSomething() рдХреЛ Base рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдореЗрд░реЗ рдкрд╛рд╕ ChildC рдХреЗ рд╕рд╛рде doSomething() рд╣реИред рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ ChildC рдЕрдм рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИ doSomething() , рд▓реЗрдХрд┐рди рдПрдХ рдЕрдбреЙрдкреНрдЯрд╛рдЗрдЬреНрдб рддрд░реАрдХреЗ рд╕реЗ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЪреЗрдХ рднреА рдЧрд╛рдпрдм рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдПрдХ @overrides рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╣рдореЗрдВ рдПрдХ override рдХреАрд╡рд░реНрдб рдФрд░ рдПрдХ --no-implicit-override рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

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

рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдирд┐рд╣рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рд╣реИ:

  1. рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ред рдЗрддрдиреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
  2. рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХреБрдЫ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╕рд╛рдорд╛рди рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдореЗрд░реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдореЗрдВ super рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ред

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

рдмреЗрд╢рдХ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ --no-implicit-override рдзреНрд╡рдЬ рдХреЗ рдиреАрдЪреЗ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ any рдФрд░ --no-implicit-any рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП @eggers рдХреА рддреБрд▓рдирд╛ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@olmobrutall рдореИрдВ рдЕрдореВрд░реНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдХреБрдЫ рдмрд╛рддреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред

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

рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗ рдХрдо рд╕реЗ рдХрдо рд░реИрдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛?

рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛

рдЬрдм рдЖрдк рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ _рдерд┐рдВрдХ_ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ:

class Base {
  hasFilename(f: string) { return true; }
}
class Derived extends Base {
  // oops
  hasFileName(f: string) { return false; }
}

рд╢рд╛рдпрдж рдпрд╣реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛

рдпрд╣ рдмрд╣реБрдд рдирд┐рдХрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:

interface NeatMethods {
  hasFilename?(f: string): boolean;
}
class Mine implements NeatMethods {
  // oops
  hasFileName(f: string) { return false; }
}

рдпрд╣ _рдЕрд╕рдлрд▓рддрд╛ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЦрд░рд╛рдм рд╣реИред

рдЖрдХрд╕реНрдорд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб

рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ

class Base {
  hasFilename(f: string) { return true; }
}
class Derived extends Base {
  // I didn't know there was a base method with this name, so oops?
  hasFilename(f: string) { return true; }
}

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

рдЖрдХрд╕реНрдорд┐рдХ any s

рдпрд╣ рд╕реЛрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдорд┐рд▓реЗрдВрдЧреЗ:

class Base {
  hasFilename(f: string) { return true; }
}
class Derived extends Base {
  // oops
  hasFilename(f) { return f.lentgh > 0; }
}

рд╣рдордиреЗ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрджрд┐ hasFilename рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ override рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдкрдардиреАрдпрддрд╛

рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрдм рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВред рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рд╕рдЬреНрдЬрд╛рдХрд╛рд░)ред

рд╕рдВрдкрд╛рджрдХ рдЕрдиреБрднрд╡

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

рдЧреИрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ

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

  • рд╕рдЯреАрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд┐рд▓рд╛рди - рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ override рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЕрд╡рд╛рдВрдЫрд┐рдд рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рд╣реИ
  • рдЕрдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рджреЗрд╢реА рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреИрд╕реЗ implements.foo = ... )ред рдпрд╣рд╛рдВ рдмрд╛рдЗрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ

@RyanCavanaugh рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рд╕рд╛рде рдЙрд╕ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕рд╣рдордд рд╣реВрдВред рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ override рдХреАрд╡рд░реНрдб рдХреЛ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛" рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЯрд┐рдХрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб (рдЬреИрд╕реЗ implements ) рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ( override рдХрд╛ рдЕрд░реНрде super. рд╡рд┐рдзрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)

@RyanCavanaugh рдореИрдВ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдП рдмрд┐рдирд╛ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝реАрд▓реНрдб рдХреА рдмрд╣реБрдд рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдЦреЛрдирд╛)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рд╣реИрдВред

@eggers рднрд▓реЗ рд╣реА рдЕрдВрдд рдореЗрдВ рджреЛ рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рд╢рдмреНрджрд╛рд░реНрде рдмрд╣реБрдд рд╕рдорд╛рди рд╣реЛрдВрдЧреЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдПрдХ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рдорддрд▓рдм рд╕реБрдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрд░реАрдХрд╛

рд╕реА # рдУрд╡рд░рд░рд╛рдЗрдб рдореЗрдВ (рдФрд░ рдЬрд░реВрд░реА) рдЕрдореВрд░реНрдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмрд┐рдирд╛ .super)ред рдЬрд╛рд╡рд╛ рдореЗрдВ @override рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдмреЗрд╢рдХ рд╡реЗ рдЕрд▓рдЧ рднрд╛рд╖рд╛ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдк рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ @RyanCavanaugh рдХреЗ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ "рдЖрдХрд╕реНрдорд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб" рд╕рдорд╕реНрдпрд╛ рдЙрдирдХреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдФрд░ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрдЧрд╛ рдкрд╣рд▓реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ componentWillMount рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ)ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐, рдЬреИрд╕реЗ @eggers рдиреЗ рдХрд╣рд╛, рдХрд┐ "рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛" рдореБрджреНрджрд╛ рдХреБрдЫ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдРрд╕реЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛ рдЬреЛ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реА # override рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдЕрдЧрд░ рд╣рдореЗрдВ --no-implicit-override рдзреНрд╡рдЬ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреЛ рд╕реА # рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ)ред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣

interface IBase {
    method1?(): void
}

class Base {
    method2() { return true; }
}

class Test extends Base implements IBase {
    IBase.method1() { }
    override method2() { return true; }
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @RyanCavanaugh рдореВрд▓рднреВрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ "рдЕрд╕рд╣рдордд рдХреНрдпрд╛ рд╣реИрдВ" рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░реВрдВрдЧрд╛:

  • override рдорд╛рдиреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
    interface IDrawable
    {
        draw?( centerPoint: Point ): void;
    }

    class Square implements IDrawable
    {
        draw( centerPoint: Point ): void; // is this an override?
    }
  • рдПрдХ override рдорд╛рдиреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ?
    interface IPoint2
    {
        x?: number;
        y?: number;
    }

    class Circle implements IPoint2
    {
        x: number; // is this an override?
        y: number; // is this an override?
        radius: number;
    }
  • рдХреНрдпрд╛ рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП override рдХреАрд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ implements рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред

@ kevmeister68 рдЕрд╕рд╣рдорддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдПрдХ рдмрд╛рдд: рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдЬрдм рдХреЛрдИ рдлрд╝реАрд▓реНрдб рдпрд╛ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛" рдХреЛ рд╣рд▓ рдХрд░рдирд╛ред

@olmobrutall рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдХрднреА рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХреА рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рд╕реА # рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ рдФрд░ рдРрд╕реА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ)? рд╕рджрд╕реНрдп рдЪрд░ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ?

@ kevmeister68 рднреА draw рд╡рд┐рдзрд┐ IDrawable рдореЗрдВ :)

@RyanCavanaugh

рдЕрдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рджреЗрд╢реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг.рдлреВ = ...)ред рдпрд╣рд╛рдВ рдмрд╛рдЗрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рдПрдХ рдирдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдмрд╣реБрдд рд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИрдВ:

  • рдпрджрд┐ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рд╣рдо рд╕рднреА рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  • рд╣рдо рд╕рднреА рд╕рдВрдХрд▓рди-рд╕рдордп рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред
  • рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реЛрдВ, рдЬреИрд╕реЗ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред
  • рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдареАрдХ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ IDE рдорджрдж рдХрд░реЗрдВред

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

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рджрд╕реНрдп рдмрдирд╛рдо рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕рджрд╕реНрдп
  • рддрд░реАрдХреЗ рдмрдирд╛рдо рдлрд╝реАрд▓реНрдб (рдкрддрд╛ рдирд╣реАрдВ рд▓реИрдореНрдмреНрдбрд╛ рдХрд╣рд╛рдБ рд╣реЛрдЧрд╛)

рдЖрдЗрдП рдкреЗрдбрд╝ рдХреА рддреБрд▓рдирд╛ рдЕрдзрд┐рдХ рдЖрд╢рд╛рдЬрдирдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рд╕реЗ рдХрд░реЗрдВ:

рдУрд╡рд░рд░рд╛рдЗрдб / рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ

class Person{
    dateOfBirth: Date;

    abstract talk();
    walk(){ //...}
}

interface ICanFly{
    fly?();
    altitude?: number;
}


class SuperMan extends Person implements ICanFly {
     dateOfBirth = new Date(); //what goes here?

     override talk(){/*...*/}
     walk = () => {/* force 'this' to be captured*/}  //what goes here

     implements fly() {/*...*/}
     altitude = 1000; //what goes here?
}

рд▓рд╛рдн:

  • рдУрдУ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред
  • extends / implements рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред

рдиреБрдХрд╕рд╛рди:

  • рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рднреА override рдпрд╛ implements рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж super. , рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ?
  • рдпрджрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ function() рдХреЗ рд▓реИрдореНрдмреНрдбрд╛ (рдЗрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред

рдУрд╡рд░рд░рд╛рдЗрдб / InterfaceName.

class Person{
    dateOfBirth: Date;

    abstract talk();
    walk(){ //...}
}

interface ICanFly{
    fly?();
    altitude?: number;
}


class SuperMan extends Person implements ICanFly {
     dateOfBirth = new Date(); //what goes here?

     override talk(){/*...*/}
     walk = () => {/* force 'this' to be captured*/}  //what goes here

     ICanFly.fly() {/*...*/}
     ICanFly.altitude = 1000; //what goes here?
}

рд▓рд╛рдн:

  • рдУрдУ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред
  • рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП super. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреБрдХрд╕рд╛рди:

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рд▓рдВрдмреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде, рдФрд░ рдСрдЯреЛ-рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реВрдЪреА рджрд┐рдЦрд╛рдирд╛ рднреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛, рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ Alt + Space рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рджреЛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реА # рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

this.

class Person{
    dateOfBirth: Date;

    abstract talk();
    walk(){ //...}
}

interface ICanFly{
    fly?();
    altitude?: number;
}


class SuperMan extends Person implements ICanFly {
     this.dateOfBirth = new Date();

     this.talk(){/*...*/}
     this.walk = () => {/* force 'this' to be captured*/} 

     this.fly() {/*...*/}
     this.altitude = 1000;
}

рд▓рд╛рдн:

  • рдХрдХреНрд╖рд╛рдУрдВ, рдЗрдВрдЯрд░рдлреЗрд╕, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
  • рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрд╡-рдореМрдЬреВрджрд╛ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рджреБрд░реБрдкрдпреЛрдЧ?)
  • рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП this. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдиреБрдХрд╕рд╛рди:

  • рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ, рдЬрд┐рд╕рд╕реЗ рдЧреИрд░-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрднреА рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ override рдПрдХ рдЕрд▓рдЧ рдЪреАрдЬ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рджреЛ рдХреАрд╡рд░реНрдб рд╣реЛрдиреЗ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ _рд╡рд┐рд╢реНрд╡рд╛рд╕_ рд╡реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рджреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рдХ рдЗрд╕ рддрд░рд╣ рдХреА рдЧрд▓рддреА рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ method already implemented in a base class рдХреЗ рд╕реНрд╡рд░ рдореЗрдВ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред

interface IDelegate {
    execute?() : void;
}

class Base implements IDelegate {
    implement public execute() : void { /// fine, this is correctly implementing execute
    }
}

class Derived extends Base {
    implement public execute() : void { 
/// ERROR: `method "execute():void" already implemented in a base class`
    }
}

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдУрдУ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдирд┐рдЬреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдирд┐рдЬреА рд╣реИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ .

рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд╝реАрд▓реНрдб рд╣реИрдВ, рдФрд░ рдЬреЛ рдХреБрдЫ рдореИрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ,

class Person{
    walk(){ //...}
}
class SuperMan extends Person  {
     walk = () => {/* force 'this' to be captured*/}
}

рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ walk рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рд╣реИ рдФрд░ Person SuperMan рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ override рдпрд╣рд╛рдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдареАрдХ рд╣реИ, рд╣рдо рдлрд╝реАрд▓реНрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рджреЛрдмрд╛рд░рд╛, рдпрд╣ рд╕реА# рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣рд╛рдВ $ override рдХреЗ рдмрдЬрд╛рдп new рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ (рдореИрдВ super.myMethod рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдирд╣реАрдВ)ред

рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдорд╛рдзрд╛рди рддрдм рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╕рдЦреНрдд рдУрд╡рд░рд░рд╛рдЗрдб рдореЛрдб рдореЗрдВ рд╣реИрдВ):

class Person{
    dateOfBirth: Date;
    talk() { }
    walk = () => { }
}

interface ICanFly {
    fly?();
    altitude?: number;
}

class SuperMan extends Person implements ICanFly {
     new dateOfBirth = new Date();
     override talk() { }
     new walk = () => { }

     implements fly() {/*...*/}
     implements altitude = 1000;
}

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╣рдореЗрдВ рдЧреИрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП implements рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗред рдлрд┐рд░, рдпрджрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рдХреЗ рдмреАрдЪ рдПрдХ рднреНрд░рдо рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдкрд╣рд▓реЗ implements рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рд╡рд╣ рд╢рдмреНрдж рдПрдХ рдХреМрд░ рд╣реИред рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ:

class C extends React.Component {
    implements componentWillMount() { }
    implements componentDidMount() { }
    implements componentWillReceiveProps(props) { }
    /// ... and the list goes on
}

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдерд╛ рд▓реЗрдХрд┐рди @olmobrutall рдиреЗ рдореБрдЭреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдкреВрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдареАрдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирдП рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдпрд╣ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдбреНрд╕ рдХреЛ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ рдЬреЛ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╣реА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдХреНрдпрд╛ new , override рдФрд░ implement рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди JS рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреАрд╡рд░реНрдб рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реИ? рднрд▓реЗ рд╣реА рд╕реА # рдореЗрдВ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реЛрдВ, рдЬреЗрдПрд╕/рдЯреАрдПрд╕ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рднреА рдХрд╛рдлреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ:

  • рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб new рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП implements рдХреНрдпреЛрдВ рд╣реИрдВ?
  • рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рдХреЛрдИ рд╡рд┐рдзрд┐ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдЪрд╛рд░ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ: override , implements , рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ?

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪреЗрдВ:

class Animal {
}

class Human extends Animal {
}

class Habitat {
    owner: Animal;
}

class House extends Habitat {
    owner = new Human();
}

var house = new House();
house.owner = new Dog(); //Should this be allowed??  

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХреА:

рдХреНрдпрд╛ owner = new Human(); рдПрдХ рдирдП (рд▓реЗрдХрд┐рди рд╕рдВрдЧрдд) рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЖрдкрдиреЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк _magic рдХреАрд╡рд░реНрдб_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЕрднреА this. рдХреЗ рд▓рд┐рдП рд╣реИред

class House extends Habitat {
    this.owner = new Human(); //just setting a value, the type is still Animal
}

@olmobrutall рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХреАрд╡рд░реНрдб рдУрд╡рд░рд╣реЗрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА 3 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _рднрд┐рдиреНрди_ рдЪреАрдЬреЗрдВ рд╣реИрдВред

  • override рд╡рд┐рдзрд┐рдпреЛрдВ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ _not_ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА super рдХреЗ рдкреАрдЫреЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред
  • new рдлрд╝реАрд▓реНрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рдирдП рджреНрд╡рд╛рд░рд╛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • implements рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдорд┐рдЯрд╛рддрд╛ рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ"ред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рдХреЛрдИ рд╡рд┐рдзрд┐ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдЪрд╛рд░ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ: рдУрд╡рд░рд░рд╛рдЗрдб , рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕ , рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ ?

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ override рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред implements рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдПрдХ рдорд╛рдпрдиреЗ рдореЗрдВ, override рдФрд░ new рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ implements рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред

рдФрд░ рдЖрдкрдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдЖрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рдЙрд╕реЗ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ override рдореВрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рд░ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдиреАрдЪреЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

new рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб рд╡рд░реНрдЧ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЧреБрдгреЛрдВ рдореЗрдВ рдЖрджрд┐рдо, рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╕рдВрдШ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ред рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб рдЬреИрд╕реЗ reassign рд╡рд╣рд╛рдВ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧрд▓рдд рд╡рд┐рдЪрд╛рд░ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдореВрд▓реНрдп рдХреЗрд╡рд▓ рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ ( new рдореЗрдВ рднреА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ redefine рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдЙрдореНрдореАрдж рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 'рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд' рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЖрдзрд╛рд░ рдЖрдзрд╛рд░ рд╕реЗ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ .. (_edit: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдирдпрд╛ рдЖрдзрд╛рд░ рдПрдХ рдХрд╛ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

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

рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╕ рдЗрддрдирд╛ рд╣реА рд╣реИ..

рдореИрдВрдиреЗ рдХреАрд╡рд░реНрдб new рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдЯреАрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реА # рдЙрдкрдпреЛрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред implement рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ implements рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдореВрд░реНрдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рди рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред override + new -> рдмреЗрд╕ рдХреНрд▓рд╛рд╕, implement -> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред

@JabX

рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдФрд░ рдЖрдк рд╕рд╣реА рд╣реИрдВ:

class Person{
    walk(){ //...}
}
class SuperMan extends Person  {
     walk = () => {/* force 'this' to be captured*/}
}

рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓: Class 'Person' defines instance member function 'walk', but extended class 'SuperMan' defines it as instance member property.

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдмрдВрдз рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

var p = new SuperMan();
p.walk = () => { };

рдпрд╛ рдФрд░ рднреА

class SuperMan extends Person {
    constructor() {
        super();
        this.walk = () => { };
    }
}

рд▓рдЧрднрдЧ override

рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдорд┐рдЯрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рд╕реБрдкрд░ рдХреЗ рдкреАрдЫреЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╣реИред override рдФрд░ implements рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо _some_ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рд╣реИ ... рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдирд╣реАрдВред

override рдФрд░ implements рджреЛрдиреЛрдВ рдХреЛ prototype super рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк super.walk() рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рди рдХрд┐ рдХреЗрд╡рд▓ super() , рдФрд░ рд╣рд░ рддрд░реАрдХреЗ (рдУрд╡рд░рд░рд╛рдЗрдб, рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ, рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛) рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

class SuperMan extends Person implements ICanFly {
     new dateOfBirth = new Date();
     override talk() { } //goes to prototype
     new walk = () => { }

     implements fly() {/*...*/}  //also goes to the prototype
     implements altitude = 1000;
}

рдФрд░ рдпрджрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ super.walk() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

class SuperMan extends Person {
    constructor() {
        super();
        this.walk = () => { super.walk(); };
    }

    //or with the this. syntax
    this.walk = () => { super.walk(); };
}

рдЙрджрд╛рд╣рд░рдг рдлрд╝реАрд▓реНрдб рд╕реЗ prototype рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ рдФрд░ рдпрд╣ = рдЯреЛрдХрди рд╣реИред

class SuperMan extends Person implements ICanFly {
     this.dateOfBirth = new Date(); //instance
     this.talk() { } //prototype
     this.walk = () => { } //instance

     this.fly() {/*...*/}  //prototype
     this.altitude = 1000; //instance
}

this. рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • this. рдХрд╛ рдЕрд░реНрде рд╣реИ рдореЗрд░реЗ рдкреНрд░рдХрд╛рд░ (рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕) рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  • = рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмрдЬрд╛рдп рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ред

рд▓рдЧрднрдЧ New

new рдлрд╝реАрд▓реНрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рдирдП рджреНрд╡рд╛рд░рд╛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

class Person {
    walk() { }

    run() {
        this.walk();
        this.walk();
        this.walk();
    }
}

class SuperMan extends Person {
    new walk(destination: string) { } //Even if you write `new` this code will break
}

рддреЛ new рд╕реЗ рдЕрдзрд┐рдХ рдХреАрд╡рд░реНрдб assign рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреАрдЬ рд╣реИ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

class Person{
    dateOfBirth: Date;
}

class SuperMan extends Person implements ICanFly {
     assign dateOfBirth = new Date();
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ reassign рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрдХреНрддрд┐ рдХреЗрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдХреЛрдИ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

assign рд▓рд┐рдЦрдирд╛ рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдЕрд╕рд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреВрд╕рд░реА рддрд░рдл = рд╣реИред

рдлрд┐рд░ рд╕реЗ this. рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрдирд╛рдпрдд рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:

class Person{
    dateOfBirth: Date;
}

class SuperMan extends Person implements ICanFly {
     this.dateOfBirth = new Date();
}

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╣рдо рдПрдХ рдРрд╕реЗ рдХреАрд╡рд░реНрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕ рдмреЙрдбреА рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ _any point_ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓рд╛рд╕ рдмреЙрдбреА рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

class Person {
    dateOfBirth : new Date();
}

рдпрд╣ рдЖрдкрдХреЛ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ рдЦрд░рд╛рдм рд╣реИред рдмреЗрд╢рдХ рдЖрдк рдирд╛рдо рдЧрд▓рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ override ) рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░ рднреА рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:

class Person {
    fullName: { firstName: string; lastName?: string };
}

class SuperMan extends Person {
    fullName = { firstName: "Clark" };

    bla() {
        this.fullName.lastName; //Error
    }
}

рдпрд╣ рдХреЛрдб рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ: рд╕рдВрдкрддреНрддрд┐ 'lastName' рдкреНрд░рдХрд╛рд░ рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ '{ firstName: string;

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рддрд░реАрдХреЗ:

class Person {
    talk() { }
}

class SuperMan extends Person {

    talk() { }

    changeMe(){
        this.talk = () => { };      
    }

    changeMyPrototype() {
        SuperMan.prototype.talk = () => { };
    }
}

@kungfusheep рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдлрд╝реАрд▓реНрдб рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рдХрд░реЗрдВред
"рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ" рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдердбреНрд╕ _are_ рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рд╡реЗ рдЙрдЪрд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд▓реИрдореНрдмреНрдбрд╛ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрджрд░реНрдн рдХреЛ рдСрдЯреЛрдмрд╛рдЗрдВрдб рдХрд░рддреЗ рд╣реИрдВред

@olmobrutall

рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдирдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХреАрдХреГрдд рдлрд╝реАрд▓реНрдб/рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ this.method() рдпрд╛ this.field рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рд╡реИрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╕рджрд╕реНрдп рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рддрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреАрдЬ рд╣реИред
this рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рд╣рдо рдмрд┐рдВрджреБ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдХрдо рдЕрд╕реНрдкрд╖реНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ

class Superman {
    this walk() { }
}

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдЗрд╕реЗ implement рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд▓рдЧреЗрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рддрдереНрдп рд╕реЗ рдареАрдХ рд╣реИрдВ рдХрд┐ рдЗрд╕ this рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?), рдФрд░ рдореБрдЭреЗ implement рдкрд╕рдВрдж рд╣реИ override рдЬреЛрдбрд╝реАред рдлрд╝реАрд▓реНрдб рдкрд░ рдПрдХ override рд╕рдВрд╢реЛрдзрдХ рдЕрднреА рднреА рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рддреАрд╕рд░рд╛ рдЕрд╕реНрдкрд╖реНрдЯ new рдХреАрд╡рд░реНрдб рд╣реЛред рдЪреВрдВрдХрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ ( = ) рдПрдХ рд╡рд┐рдзрд┐ рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЕрдм рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХреБрдЫ рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рдХрд╣ рд░рд╣рд╛ рдерд╛)ред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдлрд╝реАрд▓реНрдб рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рдХрд░реЗрдВред

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

рдореИрдВ рдЖрдкрдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ new рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдмреЗрдЪрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реЗ, рди рд╣реА рдЖрдк...)

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

рдореИрдВ рдпрд╛ рддреЛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ this рдХреЛ рдареАрдХ рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП @autobind рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИред рдФрд░ рдЬрдм рддрдХ рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдЬреЗрдПрд╕/рд░рд┐рдПрдХреНрдЯ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдИрдПрд╕ 6 рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣реЗ рдереЗред

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВред

class A {
    firstName: string;
    get name() {
        return this.firstName;
    }
}

class B extends A {
    firstname = "Joe" // oops
}

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдпрд╣рд╛рдБ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ

class B extends A {
    constructor() {
        this.firstName = "Joe"; // can't go wrong
    }
}

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

рдореЗрд░рд╛ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА member рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ):

interface IBase {
    interfaceField?: string;
    interfaceMethod(): void
}

abstract class Base {
    baseField: number;
    baseMethod() { }
    baseLambda: () => { };
    abstract baseAbstractMethod();
}

class Derived extends Base implements IBase {
    member interfaceField = "Hello";
    member interfaceMethod() { }
    member baseField = 2;
    override baseMethod() { }
    override baseLambda = () => { };
    member baseAbstractMethod() { }
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП member рдХреАрд╡рд░реНрдб рдЪреБрдиреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ override рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЯреАрдПрд╕ рд╕реАрдЦрдХрд░ рдЖрдкрдХреЛ рдЬреЗрдПрд╕ рднреА рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рд╕реА # рд╕реАрдЦрдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд╕реАрдПрд▓рдЖрд░ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдорд┐рд▓рддрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

class Rectangle {
       x: number;
       y: number;
       color: string;
}

Rectangle.prototype.color = "black";

рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рдЖрдпрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд▓реЗ рд╣реЛрдВрдЧреЗред

class BoundingBox {
      override color = "transparent"; // or should be member? 
}

рд╕рд╛рде рд╣реА member рдХреАрд╡рд░реНрдб рд╡рд░реНрдЧ рдХреЗ рдЕрдиреНрдп рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдИрд░реНрд╖реНрдпрд╛рд▓реБ рдмрдирд╛рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рд╕рдВрдХрд▓рди рд╕рдордп рдХреА рдЬрд╛рдБрдЪ / рд╕реНрд╡рддрдГ рдкреВрд░реНрдг / рдирд╛рдо) рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдпрд╛ рд╕рджрд╕реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИред

рд╢рд╛рдпрдж this. рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд░реНрдл . рд╣реИ:

class Derived {
   .interfaceField = "hello";
   .interfaceMethod() {}
   .baseField = 2;
   .baseMethod() {}
   .baseLambda = () => {};
   .baseAbstractMethod(){};

   someNewMethod(){}
   someNewField = 3;
}

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЯрд╛рдЗрдкрд╕рд┐рд╕реНрдЯрдо рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдореВрд▓реНрдп рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХрдард┐рди рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рдЖрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЬреЗрдПрд╕ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВред

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

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

рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП ESDiscuss рдереНрд░реЗрдб рд╢реБрд░реВ рдХрд░рдирд╛ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рд╕реЛрдЪрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдо рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ)ред

@olmobrutall
ES6 рдХрдХреНрд╖рд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫрд┐рдкрд╛ рд░рд╣реА рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ @kungfusheep рдиреЗ рдХрд╣рд╛, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

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

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

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

@RyanCavanaugh

рдпрд╣ override . рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реЗ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ

рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рддреАрди рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

  • рдХреЗрд╡рд▓ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ( member , implement , this. , . , рдЖрджрд┐...)
  • рдХреБрдЫ рдордд рдХрд░реЛ (рдпрд╣ рджреБрдЦрдж рд╣реЛрдЧрд╛)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреИрд╕рд▓рд╛ рдпрд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдк рдЬреЛ рдХреБрдЫ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ

рдмрд┐рд▓реНрдХреБрд▓! рд╣рдо рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЦреБрд╢ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдк-рдЪреЗрдХрд┐рдВрдЧ/рдЯреВрд▓рд┐рдВрдЧ рдкрд░ рдирд╣реАрдВред

рдХреАрд╡рд░реНрдб рдЬреЛ рднреА рд╣реЛ, рд╡рд╣ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧрд╛ (рдмрд╕ рд╕рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ)

@JabX

рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реИрдВред рдореЗрд░рд╛ рдХрд╣рдирд╛ рдерд╛ рдХрд┐ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

class Person {
    name: string = "John"; 

    saySomething() {
        return "Hi " + this.name;
    }
}

рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, name рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдЧрд╛ рдЬрдмрдХрд┐ saySomething рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдПред рдлрд┐рд░ рднреА рдореИрдВ рдпрд╣ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдБ:

Person.prototype.name = "Unknown"; 

рдХреНрдпреЛрдВрдХрд┐ Person.prototype рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕рдВрдкреВрд░реНрдг рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреНрдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред

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

рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╡рд╣ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд╢рдмреНрджрд╛рд░реНрде:

рд╕рдВрд╢реЛрдзрд┐рдд XXX рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕рджрд╕реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ . рдпрд╛ this. рдмрд╣реБрдд рдЕрд▓рдЧ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ member рдмреЗрдорд╛рдиреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП override рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рдирд╛ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡реИрд╕реЗ рднреА рдПрдХ рд╕рд╛рдЗрдб-рдлреАрдЪрд░ рд╣реИред

рдХрдИ рдорд┐рд╕рд╛рд▓реЗрдВ рд╣реИрдВ:

  • рд╕реА # рдореЗрдВ рдПрдХ static class рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ _class рдирд╣реАрдВ рд╣реИред
  • static рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ _static_ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
  • virtual рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╛рдлреА _concrete_ рд╣реИрдВ (рд╡реАрдмреА Overrideable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ)ред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

class Person{
    dateOfBirth: Date;

    abstract talk();
    walk(){ //...}
}

interface ICanFly{
    fly?();
    altitude?: number;
}


class SuperMan extends Person implements ICanFly {
     override dateOfBirth = new Date();

     override talk(){/*...*/}
     override walk = () => {/* force 'this' to be captured*/} 

     override  fly() {/*...*/}
     override altitude = 1000; 
}

рдХреНрдпрд╛ рд╣рдо рдЙрд╕ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ implement рдХреАрд╡рд░реНрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде override рдЕрдЧрд░ рдпрд╣ рджреЛрдиреЛрдВ рдореЗрдВ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ: рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВред
рдЕрдиреНрдпрдерд╛, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореВрд▓ рд╡рд░реНрдЧ рдХреА рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП override рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди implement рдФрд░ override рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрд░реНрдердкреВрд░реНрдг рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред

рджреЛрдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдЬреЗрдПрд╕ рдХреЗ рд╕рдорд╛рди рдСрдЯреЛ-рдкреВрд░реНрдг/рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢/рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ ... рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рджрд╛рд░реНрд╢рдирд┐рдХ рдЕрдВрддрд░ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдХреАрд╡рд░реНрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдПрдХ рдкреЗрдбреЗрдВрдЯрд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ: Error you should use 'override' instead of 'implement' ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:

interface IComparable {
     compare(): number;
} 

class BaseClass implements IComparable {
    implement compare(); 
}

class ChildClass extends BaseClass implements IComparable { //again 
     override compare(); // or implements... 
}

рд╕рд╡рд╛рд▓ рд╣реИ... рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ?.

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ implement / implements рдореБрджреНрджрд╛ рднреА рд╣реИред

рдЖрдЗрдП рдХреЗрд╡рд▓ override рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдХ рдХреАрд╡рд░реНрдб, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ override рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ implement рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд╛рдпрдж рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред
рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рдмрд╛рдд рд╣реИред рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрдмрдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдореВрд▓ рд╕рджрд╕реНрдп рд╕рд╛рд░ рдирд╣реАрдВ рд╣реИ ...)

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ override рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдкрд░ рдЬреЛ рдореВрд▓ рд╡рд░реНрдЧ рдкрд░ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЕрдХреЗрд▓рд╛ рд╣реВрдВ рдЬреЛ рднреЗрдж рдЪрд╛рд╣рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛ рднреА рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд рдореЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЦреИрд░, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред

рдЬрд╝рд░реВрд░, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЪрд╛рд░ рдорд╛рдорд▓реЗ рд╣реИрдВред рдмреЗрд╕ рдХреНрд▓рд╛рд╕, рдЗрдВрдЯрд░рдлреЗрд╕, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

@JabX

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

рдЖрдк рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рджреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдЪреАрдЬреЗрдВ рд╣реИрдВ рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрд╕ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╣реЛрдиреЗ рдореЗрдВ рд▓рд╛рдн рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рддреЛ рдпрд╣ рдХреБрдЫ рдЖрдзрд╛ рдмреЗрдХреНрдб рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ override рдкрд░ рдмреЛрд▓реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ extends рд╡рд░реНрдЧ рд╕реНрддрд░ рдкрд░ implements рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, override implement рдХреА рддрд░реНрдЬ рдкрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ _рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ_ рдмрдирд╛рдо _рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ_ред

@olmobrutall

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдХреАрд╡рд░реНрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдПрдХ рдкреЗрдбреЗрдВрдЯрд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ: рддреНрд░реБрдЯрд┐ рдЖрдкрдХреЛ 'рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди' рдХреЗ рдмрдЬрд╛рдп 'рдУрд╡рд░рд░рд╛рдЗрдб' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдЕрдВрддрд░ рдЕрдм рд▓рдЧрднрдЧ 4 рдмрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╛рдВрдбрд┐рддреНрдпрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рд╣реИ!

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

interface IComparable {
     compare(): number;
} 

class BaseClass implements IComparable {
    implement compare(); 
}

class ChildClass extends BaseClass implements IComparable { //again 
     override compare(); // or implements... 
}

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 'рдпрд╛ рдЙрдкрдХрд░рдг...' рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдкрдиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА compare рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк $#$8 override #$ рдХреЗ рдмрдЬрд╛рдп рдЪрд╛рдЗрд▓реНрдбрдХреНрд▓рд╛рд╕ рдореЗрдВ implement рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЖрднрд╛рд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрдХрд▓рдХ рддрдм рдЖрдкрдХреЛ рдЖрдкрдХреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдк рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкреЛрдВрдЫрдиреЗ рд╡рд╛рд▓реЗ рдереЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░!

рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реВрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА; рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдРрд╕реА рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХреЗ!

@ рдХреБрдВрдЧрдлреБрд╢реАрдк

рдпрджрд┐ рдЖрдк рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдмрдЬрд╛рдп рдЪрд╛рдЗрд▓реНрдбрдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЖрднрд╛рд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЖрдкрдХреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдк рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдорд┐рдЯрд╛ рджреЗрдВрдЧреЗ!

рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдгрдп рд╣реИ рддреЛ implement рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдореВрд░реНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ abstract рд╕реЗ virtual рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдЖрдкрдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ super рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ (рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди) рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ C# рдореЗрдВ рдХрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд░рд╣реА рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП override , рдФрд░ implements рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ (рд╕рд╛рд░/рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХреЗ рд▓рд┐рдПред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рдБред

рд╕реА # рдореЗрдВ 'рд╡реИрдХрд▓реНрдкрд┐рдХ' рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЗрд╕реЗ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрд╛ рдЧрдпрд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ C# рдореЗрдВ рд╣рдордиреЗ override рд▓рд╛рдЧреВ рдХрд┐рдП рдФрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рдФрд░ рдореИрдВрдиреЗ рдХрднреА рдХрд┐рд╕реА рдХреЛ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реБрдП рдирд╣реАрдВ рд╕реБрдирд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдЧреБрдирд╛ рдХрдард┐рди рд╕рдордЭрд╛рдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред

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

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

рдореЗрд░рд╛ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдЕрдм рдпрд╣ рд╣реИ, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдЦреНрдд override / implement рдзреНрд╡рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдЪрд╛рд╣рд┐рдП), рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдкрд░ implement рдХреАрд╡рд░реНрдб рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЖрдк рдЗрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛) рдФрд░ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╢рдмреНрджрд╢рдГ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдкрд░ implement рд╣реЛрдирд╛ рдзреЛрдЦрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдкрд░ рдирд╣реАрдВред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдПрдХ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕ рдХреАрд╡рд░реНрдб рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ 100% рдмрд┐рдХрд╛ рдирд╣реАрдВ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реИред

рдФрд░ рд╡реИрд╕реЗ рднреА, рдЗрд╕рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реВрдВред рдореИрдВ рдмрд╕ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореЗрд░рд╛ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдЕрдм рд╣реИ, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдЦреНрдд рдУрд╡рд░рд░рд╛рдЗрдб/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреНрд╡рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдЪрд╛рд╣рд┐рдП), рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХреАрд╡рд░реНрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реИред

рд╣рд╛рдБ, рдпрд╣ рдпрд╣рд╛рдБ рдкреВрд░реА рдмрд╛рдд рд╣реИред

рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЯрд╛рдЗрдкреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдирдИ рд╡рд┐рдзрд┐ рдХреЛ рдХреНрд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдРрд╕реЗ рдХреАрд╡рд░реНрдб рдХрд╛ рдкрд░рд┐рдЪрдп рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред

рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИред

рдореИрдВ alm.tools рдореЗрдВ UML рд╡рд░реНрдЧ рджреГрд╢реНрдп рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ: рдЧреБрд▓рд╛рдм:

image

рд░реЗрдлрд░реА https://github.com/alm-tools/alm/issues/84

рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдЯрд░ рд╕рдВрдХреЗрддрдХ рднреА рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ alm рдореЗрдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕рджрд╕реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред

overrides

рд░реЗрдлрд░реА https://github.com/alm-tools/alm/issues/111

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

  • рдирдпрд╛ рдХреАрд╡рд░реНрдб override рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдкрд░ рдорд╛рдиреНрдп рд╣реИ (рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рд╕рд╣рд┐рдд)

    • рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд) рдореЗрдВ override рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЛрдИ рдХрд░рддрд╛ рд╣реИ

    • get рдФрд░ set рджреЛрдиреЛрдВ рдХреЛ override рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╣реИ

  • рдпрджрд┐ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА/рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рддреЛ override рд╣реЛрдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ
  • рдирдпрд╛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ --noImplicitOverride (рдпрд╣рд╛рдВ рдирд╛рдо рдХреЛ рдмреЗрдЭрд┐рдЭрдХ рдмрд╛рдЗрдХрд╢реЗрдб рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ) override рдХреЛ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИрдВ

    • рдЗрд╕ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдкрд░рд┐рд╡реЗрд╢реА рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ (рдЕрд░реНрдерд╛рдд declare class рдпрд╛ .d.ts рдлрд╝рд╛рдЗрд▓реЗрдВ)

рдЗрд╕ рд╕рдордп рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░:

  • рдЗрдирд╣реЗрд░рд┐рдЯрд┐рдВрдЧ рд╕рд┐рдЧреНрдиреЗрдЪрд░
  • рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ (рдкрд╣рд▓реЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереА рдФрд░ рдпрд╣ рдПрдХ рдЖрдкрджрд╛ рдереА)
  • "рдореИрдВ рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ" рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдХреАрд╡рд░реНрдб

@RyanCavanaugh
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЕрднреА рд╢реБрд░реВ рд╣реБрдЖ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реИ

рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд) рдореЗрдВ override рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЛрдИ рдХрд░рддрд╛ рд╣реИ

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

class A {
    method() {}
}

class B extends A {
    override method() {}
}

class C extends B {
    method() {} 
}

рдХрдХреНрд╖рд╛ рд╕реА рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ method рд╕реЗ рдкрд╣рд▓реЗ method override рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛?

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпрд╛ рдЗрд╕реЗ рджреВрд╕рд░реА рддрд░рдл рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдореИрдВрдиреЗ рд╕реА рдореЗрдВ override рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдмреА рдореЗрдВ рдирд╣реАрдВ, рддреЛ рдХрдХреНрд╖рд╛ рдмреА рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ?

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рд╡реГрдХреНрд╖ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рджреВрд╕рд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдУрд╡рд░рд░рд╛рдЗрдб рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдЙрд╕ рд╡рд░реНрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ рдкрд╛рд╕ . рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИ

get рдФрд░ set рджреЛрдиреЛрдВ рдХреЛ override рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╣реИ

рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдореЗрд░рд╛ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рдЧреЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ? рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХреЛрдИ рд╕реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдареАрдХ рд╣реИ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ (рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рднреЛрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ), рдХреЛрдИ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреЗрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдПрдХ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛:

class A {
    get value() { return 1; }
}

class B extends 1 {
   override set value(v: number) {}
}

рдЬреЛ рдореБрдЭреЗ рд╕рд╛рджрд╛ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдПрдХрд╛рдзрд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рдЕрдзрд┐рднрд╛рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

class Base { bar(): { } }

class Foo extends Base {
  // Must write 'override' on each signature
  override bar(s: string): void;
  override bar(s?: number): void;
  override bar(s: string|number) { }
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╕рд╣реА рд╣реИред

рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ override рд╕рд┐рд░реНрдл рд╕рдВрдкрддреНрддрд┐ рд╕реНрд▓реЙрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЧреЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╣рдж рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рд▓реЗрдХрд┐рди override рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рдВрджрд┐рдЧреНрдз рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдо рдмрд╕ рдЗрддрдирд╛ рд╣реИ рдХрд┐ override рдЧреЗрдЯреНрдЯрд░ рдпрд╛ рд╕реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ _some_ рд╕рдВрдмрдВрдзрд┐рдд рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдЖрдк override get { рдХрд╣рддреЗ рд╣реИрдВ , рдХрд┐рд╕реА рднреА set рдШреЛрд╖рдгрд╛ рдореЗрдВ override рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд)

рдУрд╣ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдл рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ virtual рднреА рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред
рд╕рднреА рдХреАрд╡рд░реНрдб: virtual , override , final рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЕрдВрддрд░ рдбрд╛рд▓реЗрдВрдЧреЗред
рдореИрдВ рднрд╛рд░реА рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, "рдЧрд▓рддреА рд╕реЗ" рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЕрдм рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред
virtual рднреА рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреАрд╡рд░реНрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдЕрдореВрд░реНрдд/рдЖрднрд╛рд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдХреГрдкрдпрд╛ рдЗрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ @pankleks рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдореИрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕реАрдзреЗ рдХреБрдЫ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред

"рд╡рд░реНрдЪреБрдЕрд▓", "рдУрд╡рд░рд░рд╛рдЗрдб" рдФрд░ "рдлрд╛рдЗрдирд▓" рд╕рд╣реА рд╣реЛрдЧрд╛ред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИред

@RyanCavanaugh

рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ (рдкрд╣рд▓реЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереА рдФрд░ рдпрд╣ рдПрдХ рдЖрдкрджрд╛ рдереА)

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

@pankleks

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ virtual рднреА рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред

рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ "рдЖрднрд╛рд╕реА" рд╣реИред final рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди IMHO рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдзрд┐ (рдпрд╛ рд╕рдВрдкрддреНрддрд┐) рд╣реИ рдЬрд┐рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрдиреЗ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ virtual рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдВрдХ #1534 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@avonwyss рдпрд╣рд╛рдБ рджреЛ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рд╣реИрдВред

рдЬрдм рд╣рдордиреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░реВрдк рд╕реЗ _property рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░_ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ https://github.com/Microsoft/TypeScript/pull/6118#issuecomment -216595207 рдкрд░ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #10570 . рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдлрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ

рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдПрдВ рдореЛрдо рдХреА рдПрдХ рдЕрд▓рдЧ рдЧреЗрдВрдж рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╣рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

declare class Base {
  method(x: string): string[];
  method(x: number, count: number): number[];
}
class Derived extends Base {
  method(x) { // x: ???
    return x;
  }
}

рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХрд▓-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрдзрд╛рд░ рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛ рдХреЛ рд╕рдорд╛рди _signatures_ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ _рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди_ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ" рдХреА рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ x рдХрд╛ рдкреНрд░рдХрд╛рд░ string | number рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ x рдХрд╛ _externally-seen_ рдкреНрд░рдХрд╛рд░ string | number рд╣реЛ - рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ Derived рдореЗрдВ Base рдХреЗ рд╕рдорд╛рди рд╢рдмреНрджрд╛рд░реНрде рд╣реИ, рдпрд╣ рд╣реЛрдЧрд╛' (3) рдпрд╛ ('foo', 3) . рдХреЗ рд╕рд╛рде рдЖрд╣реНрд╡рд╛рди рдХрд░рдирд╛ рдХрд╛рдиреВрдиреА рдирд╣реАрдВ рд╣реИ

рд╣рдо рд╣рд╛рдБ, рдореБрдЭреЗ рд╡рд╣ рдпрд╛рдж рдЖрдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдПрдХрд▓-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ "рдЖрд╕рд╛рдиреА рд╕реЗ" "рдорд┐рд▓рд╛рди-рд╣рд╕реНрддрд╛рдХреНрд╖рд░" рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:

declare class Base {
  method(x: string): string[];
  method(x: number, count: number): number[];
}
class Derived extends Base {
  method(x, count) { // x: number, count: number
    return [];
  }
}

рдХреНрдпреЛрдВрдХрд┐ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдкрд░ рдХреЗрд╡рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкрд░ рд╣реИред

рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ (рдХреБрдЫ рдирд╣реАрдВ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛? (рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдХрд╛рдо)

@RyanCavanaugh рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЬреИрд╕рд╛ рдХрд┐ override рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЖрд╢рд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ (рдФрд░ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░) рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдУрд╡рд░рд▓реЛрдб рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ "рдирд┐рдЬреА" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдУрд╡рд░рд▓реЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрддрд╛ рд╣реИ (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ @JabX рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:

declare class Base {
  method(x: string): string[];
  method(x: number, count: number): number[];
  // implies: method(x: string|number, count?: number): string[]|number[]
  // or fancier: method<T extends string|number>(x: T, count?: number): T[]
}
class Derived extends Base {
  override method(x, count?) { // may only be called like the method on Base
    return [x];
  }
}

рдпрд╣ рддрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ "рдирд┐рдЬреА" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рди рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдУрд╡рд░рд░рд╛рдЗрдб (рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдУрд╡рд░рд▓реЛрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рддреЛ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ - рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛?

рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдирд╛ рдФрд░ рдУрд╡рд░рд▓реЛрдб рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рддреЛ рдЕрдЧрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп рдЬреИрд╕рд╛ рдерд╛, рддреЛ рдЖрдкрдХреЛ --no-implicit-any рдореЛрдб рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рдЬрд╛рдПрдЧреА рдФрд░ рдЖрдкрдХреЛ рд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде 2 рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдВ?

рд╕реА # рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

public string method(string blah) {};
public int method(int blah) {};

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

рдЕрднреА рдореИрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ ... рдореБрдЭреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдиреА рдкрдбрд╝ рд░рд╣реА рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╡реЗ рдЖрднрд╛рд╕реА рд╣реИрдВ (рдпрд╛рдиреА рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ) рдпрд╛ рдУрд╡рд░рд░рд╛рдЗрдб (рдпрд╛рдиреА рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рд╕реБрдкрд░ рдХрд╖реНрдЯрдкреНрд░рдж рдФрд░ рдЧрдиреНрджрд╛! рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд!

@ рд╕реИрдо-рдПрд╕ 4 рдПрд╕ рд╣рд╛рдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрдзрд┐рднрд╛рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ (рдЬрд┐рд╕реЗ рддрдм рдкрд╛рд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ "рдЕрдзрд┐рднрд╛рд░" рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ JS рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП jQuery рдЬрд╣рд╛рдВ $(function) рдПрдХ рддреИрдпрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди $(string) рдЪрдпрдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ DOM рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред

рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://www.typescriptlang.org/docs/handbook/functions.html#overloads

@avonwyss рдЖрд╣ рд╣рд╛рдБ, рдШреЛрд╖рдгрд╛рдПрдВ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ :) рдзрдиреНрдпрд╡рд╛рдж

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

рд╣рдо рдХрд╣рд╛рдВ рд╣реИрдВ (рдП) рдПрдХ override рдХреАрд╡рд░реНрдб рдпрд╛ (рдмреА) рдПрдХ @override jsdoc рдПрдиреЛрдЯреЗрд╢рди рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ "рдПрдХ рд╣реА рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдПрдХ рд╡рд┐рдзрд┐ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред" ?

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, @RyanCavanaugh рджреНрд╡рд╛рд░рд╛ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -224776519 (рдЬреВрди 8 2016) рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ (рд╕рдореБрджрд╛рдп) рдкреАрдЖрд░ рд╣реИ?

class Bar extends Foo {
  /**
   * <strong i="12">@override</strong>
   */
  public toString(): string {
     // ... 
  }

  override public toString(): string {
    // ...
  }
}

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, @RyanCavanaugh рджреНрд╡рд╛рд░рд╛ #2000 (рдЯрд┐рдкреНрдкрдгреА) (8 рдЬреВрди 2016) рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ (рд╕рдореБрджрд╛рдп) рдкреАрдЖрд░ рд╣реИ?

@рдкреАрд╕реАрдЬреЗ рд╕рд╣реА

рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ #13217 рдкрд░ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рднрд╛рдЧ рд▓реЗрдиреЗ рдФрд░/рдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛

<strong i="6">@Override</strong>
public toString(): string {
   // ...
}

@ рдХреНрд░рд┐рд╕2011 рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рдЬрд╛рд╡рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ @Override рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдирд╣реАрдВред рдПрдХ рдмрд╛рд░ #13217 рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб ( public override toString() ) рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдкреАрдЖрд░ рдореЗрдВ javadoc /** <strong i="7">@override</strong> */ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рд╕реВрддреНрд░ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ? рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рд╕реНрдереИрддрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд╕рдХреЗред рдпрд╣ ES6 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЕрдЧрд░ class A { } ; A.create = function (){} рдерд╛ рддреЛ class B extends A { } ; B.create = function (x,y) { } , A.create() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ B.create() рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ (рдФрд░ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдЖрдкрдХреЛ рдмреЗрд╕ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╕рд╛рдл-рд╕реБрдерд░реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЗрдо рдЗрдВрдЬрди рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдЬреАрд╕реА рдлреНрд░реАрдЬ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреИрд╢ рд╕реЗ рдЦреАрдВрдЪреЗ рдмрд┐рдирд╛ рд╣рд░ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ 'рдирдпрд╛' рдХреБрдЫ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреБрд░рд╛рдИ рд╣реИ)ред рдЪреВрдВрдХрд┐ ES6 рдХреЗ рддрд╣рдд рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдмрдирд╛рдирд╛ рд╣реА рдПрдХрдорд╛рддреНрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реНрдереИрддрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЖрдзрд╛рд░ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреЛ рдХрд┐ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред :/ рдЗрд╕ рдмреАрдЪ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рднреА рдЖрдзрд╛рд░ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдЬреИрд╕реЗ SomeType.create() ) рдХреЛ рдЙрдирдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реВрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ .

рдпрд╣рд╛рдВ "рдореВрд░реНрдЦрддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореБрдЭреЗ рдПрдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЧрд░реНрд╡ рд╣реЛрдЧрд╛):

class A {
    static create(s: string) {
        var inst: A;
        /* new or from cache */
        inst.init(s);
    }
    protected init(s: string) { }
}

class B extends A {
    static create(s: string);
    static create(n: number);
    static create(n:any) {
        var inst: B;
        /* new or from cache */
        inst.init(n);
    }
    protected init(s: string);
    protected init(n: number);
    protected init(n: any) {
        super.init(n.toString());
    }
}

class C extends B {
    static create(s: string)
    static create(n: number)
    static create(b: boolean)
    static create(b: any) {
        var inst: C;
        /* new or from cache */
        inst.init(b);
    }
    protected init(s: string);
    protected init(n: number);
    protected init(b: boolean);
    protected  init(b: any) {
        super.init(b ? 0 : 1);
    }
}

(https://goo.gl/G01Aku)

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛:

class A {
    static create(s: string) {
        var inst: A;
        /* new or from cache */
        inst.init(s);
    }
    protected init(s: string) { }
}

class B extends A {
    new static create(n:number) {
        var inst: B;
        /* new or from cache */
        inst.init(n);
    }
    new protected init(n: number) {
        super.init(n.toString());
    }
}

class C extends B {
    new static create(b: boolean) {
        var inst: C;
        /* new or from cache */
        inst.init(b);
    }
    new protected  init(b: boolean) {
        super.init(b ? 0 : 1);
    }
}

@rjamesnw рдЖрдкрдХреЛ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ "рдЗрд╕" рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╕реНрдерд┐рд░ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдПрдХ рднрд╛рд╡рдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП рдХрд┐ @pcj рдиреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ ( рдЯрд┐рдкреНрдкрдгреА ) рд╡реНрдпрдХреНрдд рдХреА рдереА, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХрд╣рд╛рдВ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкреАрдЖрд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рднреНрд░рдорд┐рдд рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ # 13217 рдЗрддрдирд╛ рдХрд░реАрдм рдерд╛, рдлрд┐рд░ @DanielRosenwasser рдФрд░ рдХрдВрдкрдиреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЧреЛрд▓реА рдорд╛рд░ рджреА рдЧрдИ рдЬреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдпрд╣рд╛рдВ рд╕рд░реНрдХреБрд▓рд░ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рд╢рд╛рдпрдж рдпрд╣ 'рдбрд┐рдЬрд╝рд╛рдЗрди-рдЯрд╛рдЗрдо' рдбреЗрдХреЛрд░реЗрдЯрд░ (#2900) рдЪреАрдЬрд╝ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рджреЗрдЧреА, рд╢рд╛рдпрдж рдирд╣реАрдВ? рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд░рдирдЯрд╛рдЗрдо рдбреЗрдХреЛрд░реЗрдЯрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреБрдЫ рдФрд░ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

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

рдпрджрд┐ рдХреЗрд╡рд▓ рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рдереА рдХрд┐ рдЪреЗрдХ рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рд╣реБрдП рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреА рдмрд╣реБрдд рд╕реА рд╕реАрдорд╛рдПрдБ рд╣реИрдВред

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддрдм рд╕реЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ 3 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЗрддрдиреА рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИред рдкреНрд░рддреНрдпреЗрдХ "рдЧрдВрднреАрд░" рд╡рд╕реНрддреБ рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛ рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рд╕реА #, рдПрдл #, рд╕реА ++ ... рдЖрдк рдЗрд╕реЗ рдирд╛рдо рджреЗрдВред

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

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

рдорд╛рдирд╛ред рдпрд╣ рджреЗрдЦрдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрд╕реНрдкрд╖реНрдЯ/рдХрд┐рдирд╛рд░реЗ-рдХреЗрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ ... рдореМрд▓рд┐рдХ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВ! рдЕрдЧрд░ рдЗрддрдиреА рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ рдФрд░ рддреАрди рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ, рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

рдЪрд▓реЛ :joy_cat:

рдХреГрдкрдпрд╛ рд░рдЪрдирд╛рддреНрдордХ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдиреЗрдВ; рд╣рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХрд░ рд▓реЗрдВ

рд▓реЗрдХрд┐рди рджреЛрд╕реНрддреЛрдВ, рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдкрдХреНрд╖ рдореЗрдВ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╣реЗрдВред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдореБрджрд╛рдп рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдмрд╣реБрдд рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ TS рдЯреАрдо рд╣рдореЗрдВ рдЗрд╕рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ @armandn рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ, рдЯреАрдПрд╕ рдХреА рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рддреА рд╣реИ рдЬрдмрдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред рдЕрдиреНрдпрдерд╛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдордпрд░реЗрдЦрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ GitHub рд▓реЛрдб рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ:

  • рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛
  • рд╣рдордиреЗ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдмрдирд╛рдо рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -98874744
  • #6118 рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдордиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рджрд┐рдпрд╛ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -216626012
  • рд╣рдордиреЗ рдХрд╣рд╛ рдХрд┐ рд╣рдо рдХреБрдЫ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -224776519
  • рдкреАрдЖрд░ #13217 . рдкрд░ рдЦреБрд▓рд╛
  • рдкреАрдЖрд░ (рд▓рдЧрднрдЧ 100 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ) рдХреА рд╡реНрдпрд╛рдкрдХ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд╣рдо рдЬрдЯрд┐рд▓рддрд╛ рдЪрд┐рдВрддрд╛рдУрдВ #20724 рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдореАрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЗ рдЧрдП
  • рдлрд┐рд░ рд╕реЗ, рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд╛рдн рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЙрддрдирд╛ рд╣реА рдХрд░реАрдм рд╣реИ рдЬрд┐рддрдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рд╕рдорд╛рди рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлреАрдЪрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рд╣рд╛рд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #24423 рджреЗрдЦреЗрдВред

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдзреИрд░реНрдп рд░рдЦрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рддреБрд▓рдирд╛ рдХрд░рдХреЗ, C++ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ; рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рдЗрддрдиреА рдкреБрд░рд╛рдиреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рдпрд╕реНрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдШрд░ рдкрд░ рд░рд╣ рд╕рдХреЗред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдЬреЛрдбрд╝ рдХреЛ рдЗрд╕рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рддреМрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрдиреБрднрд╡ рд╕реЗ рдмреЛрд▓рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧ рдЪрд┐рд▓реНрд▓рд╛ рд░рд╣реЗ рдереЗ (рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдВ, рдореИрдВ рдЖрдкрдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ) рдиреЗ рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ (рдХреЛрдИ рдЪреМрд░рд╛рд╣реЗ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ, рдХреЛрдИ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ, рдХреЛрдИ рд╕рд╢рд░реНрдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ) рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрд┐рдЯрд╣рдм рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдереАрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ override рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрддрд░рдирд╛рдХ рдЪреАрдЬ рд╣реИ, рдмрд╕ рд╣рдо рд╣рдореЗрд╢рд╛ рдкреВрд░реНрдг рдЕрдзрд┐рдХрддрдо рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рдореБрдЭреЗ рдЕрднреА override рдХреЗ рд╕рд╛рде рдореВрд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ:

  • рдпрд╣ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рдЬреЛ рдЖрдк рдЖрдЬ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдЗрд╕рд▓рд┐рдП рдпрд╣ "рдирдпрд╛ рдирд╣реАрдВ" рд╣реИ "рдЬреЛ рдЪреАрдЬреЗрдВ рдЖрдк рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ)
  • рд╢рдмреНрджрд╛рд░реНрде рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ override рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ (рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдмрдврд╝рд╛рддрд╛ рд╣реИ)
  • рдпрд╣ рдПрдХ рдирдП рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛ 100% "рдкреНрд░рдХрд╛рд╢" рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдзреНрд╡рдЬ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╢рд╛рдпрдж strict рдХреЗ рддрд╣рдд рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди (рд╡рд┐рддрд░рд┐рдд рдореВрд▓реНрдп рдШрдЯрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдПрдХ рдирдП рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдзреНрд╡рдЬ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рд╡рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рдФрд░ рджреЛрд╣рд░реАрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рддреМрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╕рдордп рдЕрдкрдиреЗ рд╕рдВрдкреВрд░реНрдг рдорд╛рдирд╕рд┐рдХ рдмрдЬрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рдХрдИ рдмрд╛рд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рдпрд╣рд╛рдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдордЬрдмреВрдд рдЖрдВрддрд░рд┐рдХ рдЕрд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рдХреНрдпрд╛ override рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рджрд╕реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХрдерд┐рдд рдореВрд▓реНрдп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдореНрдореАрджреЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдХреБрдЫ рдЕрдиреБрдкрд╛рдд рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИрдВ)

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

рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ override рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ JS рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА, рддреЛ рдЗрд╕реЗ рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЪреИрдВрдкрд┐рдпрди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реЛрдЧреАред

рдпрд╣ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рдЬреЛ рдЖрдк рдЖрдЬ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдЗрд╕рд▓рд┐рдП рдпрд╣ "рдирдпрд╛ рдирд╣реАрдВ" рд╣реИ "рдЬреЛ рдЪреАрдЬреЗрдВ рдЖрдк рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬреЛ рдХреАрд╡рд░реНрдб рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -389393397 рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдЪреАрдЬреЗрдВ рд╕рдВрднрд╡ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЧреИрд░-рд╕рд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред

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

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЯреАрдПрд╕рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдпрд╣рд╛рдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред @kungfusheep рдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ https://github.com/Microsoft/TypeScript/issues/2000#issuecomment -192502734 рдореЗрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдлреЙрд▓реЛ-рдЕрдк рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ TSLint рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рдкрд░ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдХреЛ рд╣реИрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛ред рдореИрдВ

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

рдХрд┐рд╕реА рднреА рднрд╛рдЧреНрдп рдХреЗ рд╕рд╛рде, рдПрдХ рдХрд╕реНрдЯрдо TSLint рдирд┐рдпрдо 90% рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдХреА рдХрдореА рд╣реЛрдЧреА, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдЯрд╛рдЗрдк-рдЕрд╡реЗрдпрд░ рдирд┐рдпрдореЛрдВ, tslint-рднрд╛рд╖рд╛-рд╕реЗрд╡рд╛ рдФрд░ рдСрдЯреЛ-рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, TSLint рддреНрд░реБрдЯрд┐ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд TS рддреНрд░реБрдЯрд┐ рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдореЗрд░реА рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдПрдХ TSLint рдкреНрд▓рдЧрдЗрди (рдпрд╛ рдХрдИ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкреНрд▓рдЧрдЗрдиреНрд╕) рд╕рдореБрджрд╛рдп рдХреЛ рдХреБрдЫ рдЕрдиреБрднрд╡ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдПрдХ рд╕рдордЭреМрддреЗ рдкрд░ рдЖрдиреЗ рдХрд╛ рдореМрдХрд╛ рджреЗрдЧрд╛ред рддрдм рд╢рд╛рдпрдж рдЗрд╕реЗ рдореВрд▓ TSLint рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ override рдХреАрд╡рд░реНрдб рдХреЗ рд╕реМрдВрджрд░реНрдп рд▓рд╛рдн рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рдкреНрд░реЗрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗред

рдмрд╕ рдпрд╣рд╛рдБ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред рд╕реА # (рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░) virtual рдФрд░ override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╡рд░реНрдЪреБрдЕрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ virtual рд╣реЛрддреЗ рд╣реИрдВ (рд╕реНрд╡рднрд╛рд╡ рд╕реЗ)ред рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░ рджреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп nooverride рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реЛ? рдмреЗрд╢рдХ рд▓реЛрдЧ рдЗрд╕реЗ рдЕрднреА рднреА рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рд╕рдореНрдореЗрд▓рди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреБрдЖ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╕реЗ, рдмрд╕ рдпрд╣рд╛рдБ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╛рд╣рд░ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред ;) рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рд╕реЗ рднреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп nooverride рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реЛ?

рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕реЛрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЕрдВрддрд┐рдо рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ readonly рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдмрдЪреНрдЪреЗ рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓рддрд╛ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рдирд╛ рд╣реИ (рдЬрдм рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рддреА рд╣реИ)ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, readonly рд╡рд┐рдзрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ "рдпрд╣ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рдмрджрд▓ рджреЗ, рдЪрд╛рд╣реЗ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рддрддреНрдХрд╛рд▓ рдХреЗ рдмрд╛рдж" рдмрд╣реБрдд рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

_рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:_ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рджрд╕реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░рд╛ рддрд░реНрдХ рдзреНрд╡рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╢рд╛рдпрдж private рд╡рд░реНрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ "рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп" рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдзрд╛ рд╕реЛ рд░рд╣рд╛ рд╣реЛрдЧрд╛ (рдЬрд╛рд╣рд┐рд░ рд╣реИ "рдЕрдВрддрд┐рдо" рдХрд╛ рдЕрд░реНрде рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ рд▓реЗрдХрд┐рди рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛), рдПрд▓рдУрдПрд▓; рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред

@rjamesnw рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рд╕рдВрд░рдХреНрд╖рд┐рдд, рдирд┐рдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдирд╛ override , рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЯрд╛рдЗрдк-рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЕрдкрдиреЗ [рдХрдерд┐рдд] рд╡рд╛рджреЗ рдкрд░ рдирд┐рд░рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХреЛрдб рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ) "рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдИ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рддрд░реНрдХ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдРрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдореБрдЦ рддреБрд▓рдиреАрдп рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ override рдЬреЛрдбрд╝рд╛ рд╣реИред
рдЗрд╕реЗ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ tslint рдирд┐рдпрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕реА рддрд░рд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ)ред
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рднрд╛рд╖рд╛ рдЬреИрд╕реЗ 2.x -> 3.x рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рди рджреЗрдВред рд╣рдо рдлрдВрд╕рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?
рдЕрдЧрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ override рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП 3.x рдореЗрдВ рдХреБрдЫ рдмреНрд░реЗрдХрд┐рдВрдЧ-рдЪреЗрдВрдЬ-рдЯреНрд╡реАрдХрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рдмрдирд╛рдо рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ override рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдЯреАрдПрд╕ рдХреЛ рдЬрд╛рд╡рд╛ рдпрд╛ рд╕реА # рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...

рдпрджрд┐ рд▓реЛрдЧ рд╕рдЦреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп override (рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ tslint рдирд┐рдпрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдирд┐рд╡рд╛рд░реНрдп override рдХрд╛ рдореВрд▓реНрдп рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рдХрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧрд▓рддреА рд╕реЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЧрд▓рддреА рд╕реЗ рдиреЙрдЯ -рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд▓рдЧрддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2015 рд╕реЗ рдЦреБрд▓рд╛ рдпрд╣ рдореБрджреНрджрд╛ рдореЗрд░реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрд╕рд╛рд╣ рдФрд░ рдЗрдВрдЬреАрд▓рд╡рд╛рдж рдкрд░ рдардВрдбреЗ рдкрд╛рдиреА рдХреА рдПрдХ рдмрд╛рд▓реНрдЯреА рд╣реИ ...

рдпрд╣ рднрд╡реНрдп * - рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рдирд╣реАрдВ рд╣реИ:

/* Put this in a helper library somewhere */ function override(container, key, other1) { var baseType = Object.getPrototypeOf(container); if(typeof baseType[key] !== 'function') { throw new Error('Method ' + key + ' of ' + container.constructor.name + ' does not override any base class method'); } }

рдпрд╣ рднреА рджреБрдЦрдж рдФрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬреАрдПрдЪ рдкрд░ No one assigned ред рд╢рд╛рдпрдж рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдВрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп? ;) CompileTimeSafeScript...

рдпрд╣ рдкреВрд░рд╛ рдзрд╛рдЧрд╛ рдПрдХ рдмрдбрд╝реЗ "рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкрдХреНрд╖рд╛рдШрд╛рдд" рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ "80% рдорд╛рдорд▓реЛрдВ рдХрд╛ рдореВрд▓реНрдп 20% рдХрд╛рдо рдХреЗ рд╕рд╛рде рд╣реИ" рдФрд░, рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдПрдБ, рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ 3.x рдореЗрдВ рдЯреНрд╡реАрдХ рдХрд░реЗрдВ?

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

рддреЛ, рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЯрд╛рдЗрдк-рдЪреЗрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рдереЛрдбрд╝реА рд╕реА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ:

export const override = <P extends Function>() => <K extends keyof P["prototype"]>(
  target: Object,
  methodName: K,
  descriptor: TypedPropertyDescriptor<P["prototype"][K]>
) => {
  // this is a no-op. The checking is all performed at compile-time, so runtime checks are not needed.
}

class Bar {
  biz (): boolean {
    return true;
  }

  qux (): string {
    return "hi";
  }
}

class Foo extends Bar {
  // this is fine
  @override<typeof Bar>()
  biz (): boolean {
    return false;
  }

  // error: type '() => number' is not assignable to type '() => boolean'
  @override<typeof Bar>()
  biz (): number {
    return 5;
  }

  // error: argument of type '"baz"' is not assignable to parameter of type '"biz" | "qux"'
  @override<typeof Bar>()
  baz (): boolean {
    return false;
  }
}

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реБрдкрд░ рдЯрд╛рдЗрдк рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рдБрдЪ рд╕рднреА рд╕рдВрдХрд▓рди рд╕рдордп рд╣реИред

@alangpierce

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЯреАрдПрд╕рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдпрд╣рд╛рдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред

[...]

рддрдм рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдХреЛрд░ TSLint рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХреАрд╡рд░реНрдб рдХреЗ рд╕реМрдВрджрд░реНрдп рд▓рд╛рдн рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рдкреНрд░реЗрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗред

100% рд╕рд╣рдорддред рдЖрдЗрдП рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рдХрд░ рджреЗрдВ!

рдирдорд╕реНрддреЗ - рдпреЛрдЬрдирд╛ рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ tslint рдирд┐рдпрдо рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

https://github.com/bet365/override-linting-rule

рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ ~ 1mloc рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреВрд░реНрдг рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрдореВрд▓реНрдп рд░рд╣рд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рдЗрд╕ рд░рд╛рдп рдХреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЕрдВрддрддрдГ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдо рдХреЛ рд╕реНрдЯреЙрдк-рдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдФрд░ рд▓рд┐рдВрдЯ рдирд┐рдпрдореЛрдВ рд╕реЗ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рддрдХ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░-рдлреАрдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдмрд╛рд░рд╛ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ?

рддреЛ, рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЯрд╛рдЗрдк-рдЪреЗрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рдереЛрдбрд╝реА рд╕реА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ:

рдХреБрдЫ рд╕реБрдзрд╛рд░:

function override< Sup >( sup : { prototype : Sup } ) {
    return <
        Field extends keyof Sup ,
        Proto extends { [ key in Field ] : Sup[ Field ] } ,
    >(
        proto : Proto ,
        field : Field ,
        descr : TypedPropertyDescriptor< Sup[ Field ] > ,
    )=> {}
}

class Foo {

    bar( a : number ) {
        return a 
    }

    bar2( a : number , b : number ) {
        return a 
    }

}

class Foo2 {

    @override( Foo )
    bar( a : number ) {
        return 1
    }

    @override( Foo )
    bar2( a : number , b : number ) {
        return 1 
    }

    xxx() { return '777' }

}

class Foo3 extends Foo2 {

    @override( Foo ) // OK
    bar( a : number ) { return 5 }

    @override( Foo ) // Error: less args than should
    bar2( a : number ) { return 5 }

    @override( Foo ) // Error: accidental override Foo2
    xxx() { return '666' }

    @override( Foo ) // Error: override of absent method
    yyy() { return 0 }

}

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди

рдареАрдХ рд╣реИ, рдУрд╡рд░рд░рд╛рдЗрдб рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
рдиреЛрдб рдкрдардиреАрдп рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:

// Interface so you will keep typings for all Readable methods/properties that are not overriden:
// Fileds that are `Omit`-ed should be overriden (with any signature you want, it do not have to be compatible with parent class)
interface ReadableObjStream<T> extends Omit<stream.Readable, 'push' | 'read'> {}

// Use extends (TYPE as any) to avoid compilation errors and override `Omit`-ted methods
class ReadableObjStream<T> extends (stream.Readable as any) {
    constructor()  {
        super({objectMode: true}); // force object mode. You can merge it with original options
    }
    // Override `Omit`-ed methods with YOUR CUSTOM SIGNATURE (can be non-comatible with parent):
    push(myOwnNonCompatibleSignature: T): string  { /* implementation*/ };
    read(options_nonCompatibleSignature: {opts: keyof T} ): string  { /* implementation*/ }
}

let typedReadable = new ReadableObjMode<{myData: string}>();
typedReadable.push({something: 'else'}); // will throw compilation error as expected
typedReadable.pipe(...) // non overloaded methods typings supported as expected

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдиреБрдХрд╕рд╛рди super.parentMethod рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдХрдореА рд╣реИ (рд▓реЗрдХрд┐рди interface ReadableObjStream рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЗ рдкрд╛рд╕ ReadableObjStream рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рднреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИрдВред

@ рдирд┐рди-рдЬрд┐рди @ рдмрд╛рдпреЛрдмреЙрд▓ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рдЪреЗрдХрд┐рдВрдЧ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ protected рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ public рдХреЗ рд╕рд╛рдеред

( рдирд┐рди-рдЬрд┐рди рдХреЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

C++ 11 рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рд╕реНрдкреЗрд╕рд┐рдлрд╛рдпрд░ рдПрдХ рдХрд┐рд▓рд░ рдлреАрдЪрд░ рдерд╛ред
рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрд╛рдзрд╛ рдХреЗ рдЯреАрдПрд╕ рдЖрдзрд╛рд░ рд╕рдорд░реНрдерди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╡реЛрдЯ!)

рд╣рдордиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧрд▓реА рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рднреА рдЬрд▓реНрдж рд╣реА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░:

class Obj { 

    static override<
        This extends typeof Obj,
        Over extends keyof InstanceType<This> = never,
    >(this: This, ...overs: Over[]) { 
        return this as This & (
            new(...a:any[])=> InstanceType<This> & Protect< Omit<InstanceType<This> , Over > >
        )
    }

}

class Foo extends Obj {

    bar(a: number) {
        return 0
    }

    bar2(a: number) {
        return 0
    }

    foo = 1

}

class Foo2 extends Foo.override('bar') {

    foo = 2

    bar( a : number ) {
        return 1
    }

    // Error: Class 'Foo & Protect<Pick<Foo, "bar2" | "foo">>'
    // defines instance member property 'bar2',
    // but extended class 'Foo2' defines it as instance member function.
    bar2( a : number ) {
        return 1
    }

    bar3( a : number ) {
        return 1
    }

}

declare const Protected: unique symbol

type Protect<Obj> = {
    [Field in keyof Obj]:
    Object extends () => any
    ? Obj[Field] & { [Protected]: true }
    : Obj[Field]
}

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ

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

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

рд╡реИрд╕реЗ рднреА, рдХреНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрдЪреНрдЪреЛрдВ рдореЗрдВ рд╕реБрдкрд░ рдХреЙрд▓ рдХреЛ рдЬрдмрд░рджрд╕реНрддреА рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ? TSLint рдирд┐рдпрдо рдЬреЛ рдЫрд┐рдкрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ?

рдкреБрдирд╢реНрдЪ: рдореИрдВ "рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ" рдиреАрддрд┐ рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдлреЗрдВрдХрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк 'рдУрд╡рд░рд░рд╛рдЗрдб' рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ ... рдпрд╛рдиреА, рдЕрдЧрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

@GonziHere рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ C# рдпрд╛ Java рдореЗрдВ, рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХрд╛ рдЕрд░реНрде рд╕реБрдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд░рдЪрдирд╛рдХрд╛рд░ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп "рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ" рдирд╣реАрдВ рд╣реИрдВред

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

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрдкрдХреЛ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИред

@GonziHere рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдореВрд░реНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдореВрд░реНрдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рдЖрдк рдирд┐рдЬреА _onInit рдФрд░ _onDestroy рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдк рдЕрдзрд┐рдХ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рдВрд░рдХреНрд╖рд┐рдд onInit рдФрд░ onDestroy рдЕрдореВрд░реНрдд рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдпрд╛ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рдВрд╕ рдпрджрд┐ рд╡реЗ рд╣реИрдВ рддреЛ рдмрдирд╛рдПрдВ) рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ)ред рдирд┐рдЬреА рдХрд╛рд░реНрдп рджреВрд╕рд░реЛрдВ рдХреЛ рдмреБрд▓рд╛рдПрдВрдЧреЗ, рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрдг рд╣реЛрдВрдЧреЗред

@GonziHere @rjamesnw рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдмрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдХрд┐ onInit рдФрд░ onDestroy _ final_ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрд╛рд▓реА рд╕рдВрд░рдХреНрд╖рд┐рдд рдЕрдореВрд░реНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЧрд▓рддреА рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЕрдВрддрд┐рдо рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛) рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@shicks , @rjamesnw , рдореИрдВ @GonziHere рдЬреИрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реВрдВред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЕрдореВрд░реНрдд рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реЛрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЙрди рдкреНрд░рддреНрдпреЗрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ super() рдкрд░ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рдкрд░ ngOnInit рдпрд╛ ngOnDestroy рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддреЛ рдЙрд╕ рдЖрдзрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЧрд▓рддреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред override рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЗрд╡ рдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдПрдЧреА рдХрд┐ рд╡реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ super() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;

рдЬрд╛рд╡рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ, @Override рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╢реЛрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдЕрдореВрд░реНрдд рдпрд╛ рдЦрд╛рд▓реА рд╣реЛрддреА рд╣реИ (рдЬрд╣рд╛рдВ super() рдХреЛ _not_ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рдЬрд┐рд╕рд╕реЗ override рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ super() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрд╛рд╡рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ, @Override рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╢реЛрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдЕрдореВрд░реНрдд рдпрд╛ рдЦрд╛рд▓реА рд╣реЛрддреА рд╣реИ (рдЬрд╣рд╛рдВ super() рдХреЛ _not_ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рдЬрд┐рд╕рд╕реЗ override рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ super() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рд╡рд┐рд╖рдп рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдиреЗ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрд░ рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, override рдХрд╛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣рд┐рд╕реНрд╕рд╛ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред
рдЕрднреА рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЬреЛ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
super рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕реЗ рди рдХрд╣рдирд╛ рднреА рд╕рд╣реА рд╣реИред

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

рд╢реБрджреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬрд┐рд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ Parameters рдФрд░ ReturnType рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдРрд╕рд╛ рдХреБрдЫ:

class Base {
    public methodName(arg1: string, arg2: number): boolean {
        return false; // base behaviour, may be stub.
    }
}
class Derived extends Base {
    public methodName(...args: Parameters<Base["methodName"]>): ReturnType<Base["methodName"]> {
        const [meaningful, variableNames] = args;
        return true; // implemented behaviour here.
    }
}

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

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЧрд▓рддрдлрд╣рдореА рд╣реИ рдХрд┐ override рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ "рдХреНрдпрд╛ super() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

@lorenzodallavecchia рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдореВрд▓ рд▓реЗрдЦрдХ рдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ, рдЙрд╕реЗ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ override рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╕реНрдХреНрд░реВ-рдЕрдк рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рд░рд┐рдлреИрдХреНрдЯрд░ рд╣реЛрдиреЗ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдирд╛рдо рдФрд░/рдпрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдлрд╝рдВрдХреНрд╢рди рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

override рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде (рдореВрд▓ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рднреА рдЙрд▓реНрд▓реЗрдЦрд┐рдд) рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрдорд┐рдХ IDE рдкреНрд░рдпреЛрдЬреНрдп рд▓рд╛рдн рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН override рд╢рдмреНрдж рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдкрд░ IDE рдЖрдкрдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

override рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдзреНрд╡рдЬ рднреА рдкреЗрд╢ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ , рддрд╛рдХрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ (рдЬреЛ рдХрд┐рд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддрд╛ рд╣реИ (рдЬреЛ рдЕрдм рдмрдЧ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрд╡рд░реНрдЧ рдиреЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджрд┐рдпрд╛ рдерд╛ )

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ override рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХрдард┐рди рднреА рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрдВ рддрд╛рдХрд┐ рдирдИ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рди рдХрд░реЗрдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕), рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░рдирдЯрд╛рдЗрдо рдмрдЧ рд╕реЗ рдмрдЪреЗрдВред

рдЬрд╛рд╡рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ, @Override рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╢реЛрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред

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

рдФрд░ рдЗрд╕рд▓рд┐рдП @lucasbasquerotto рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ +1, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ: рдпрджрд┐ рдореИрдВ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдпрд╛ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЕрд░реНрде рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдкреЛ рдпрд╛ рдЧрд▓рдд рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛: рдЕрдЧрд░ рдореБрдЭреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдлреАрдбрдмреИрдХ рднреА рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдХрднреА-рдХрднреА рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИред

рдХрд┐рд╕реА рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ ... @override рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЧрд╛рдпрдм рд╣реВрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рдХрд╛ ~15 рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ 1-2 рд╕рд╛рд▓ рдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИред

@override рдХрд╛ рдЬрд╝реЗрди рдЖрдк рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рди рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рд╡рд┐рд▓реЛрдо рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЛрдИ рд╡рд┐рдзрд┐ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдмрд╕ рдореГрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

(рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рд▓рд┐рдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ @Override рд╢реЛрд░ рдерд╛, рддреЛ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ super рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЬреЛ рдЬрд╛рдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдЯреЙрд╕-рдЕрдк рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ super рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╡реНрдпрд░реНрде рд╣реИред рдЪреВрдВрдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдЕрдВрд╢ _ should't_, рдпрд╣ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИред

рдореЗрд░рд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдк-рд╡рд░реНрдЧ рдЖрдкрдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░реЗрдВ, рддреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ final рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ рд╣реИ (рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ # 33446 рджреЗрдЦреЗрдВ) рдФрд░ рдЗрд╕реЗ рдПрдХ рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ _рднрд┐рдиреНрди-рдирд╛рдо_ рдЦрд╛рд▓реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ _рдмрд┐рдирд╛_ super рдХреЙрд▓ред рдЙрд╕ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ override рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдк-рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдХреЗ рдЬрд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рд╣реВрдВ), рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ final рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ override рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкрдереНрд░реЗрдб рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреЛ рд▓реЗрдХрд░ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ final рдпрд╛ override рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрд╕рд░реЗ рдкрд░ рдХреНрдпреЛрдВ рджреЗрддреЗ рд░рд╣рддреЗ рд╣реИрдВред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рджреЛрдиреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВред

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

рдЕрдВрддрд┐рдо
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд░реЛрдХреЗрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдХрдХреНрд╖рд╛ рдХрд╛ рдореВрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХреЗред

@ рд╕реИрдо-рдПрд╕ 4 рдПрд╕ рд╣рдо рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ :-)

рдореБрджреНрджреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг ..

рдкреНрд░рд╛рд░рдВрднрд┐рдХ

class Base {}
class Entity extends Base {
    id() {
        return 'BUG-123' // busisess entity id
    }
}

рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд░рд┐рдлреИрдХреНрдЯреЗрдб

class Base {
    id() {
        return '84256635572' // storage object id
    }
}
class Entity extends Base {
    id() {
        return '12' // busisess entity id
    }
}

рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЖрдХрд╕реНрдорд┐рдХ рдЕрдзрд┐рднрд╛рд░ рдорд┐рд▓рд╛ред

define рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдорд╛рдорд▓рд╛

class Base {
    define id() {
        return '84256635572' // storage object id
    }
}
class Entity extends Base {
    define id() {
        return '12' // busisess entity id
    }
}

рд╢реЙрд▓реНрдб рдмреА рдПрд░рд░: рдПрдХреНрд╕реАрдбреЗрдВрдЯрд▓ рд░рд┐рдбрд┐рдлрд╛рдЗрдиред

рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди

@ рдирд┐рди-рдЬрд┐рди define рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ _not_ override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?

@ рд╕реИрдо-рдПрд╕ 4 рдПрд╕ рд╣рдо рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ :-)

рдУрд╣, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЛ рдХреАрд╡рд░реНрдб define рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЬреЛ рдЖрдк рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╕реА # рдореЗрдВ virtual рд╢рдмреНрдж рдЬреИрд╕рд╛ рд╣реИ?

(рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рднреА рдкрд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреА рдХрдХреНрд╖рд╛рдПрдВ Base рдФрд░ Entity рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм Entity рдХреЗ рд▓рд┐рдП Base рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдерд╛?)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2 рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ ...
рдП) рдЖрдк рдЕрдкрдирд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ final рдХреЗ рдмрд┐рдирд╛ рд╕рдмрдХреБрдЫ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмреА) рдЖрдк рдЕрдкрдирд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ virtual рдХреЗ рдмрд┐рдирд╛ рд╕рдмрдХреБрдЫ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ рд╕реИрдо-рдПрд╕ 4 рдПрд╕ рдЗрдХрд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╕ рдмрдврд╝рд╛рддреА рд╣реИред :-) рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред virtual рдХреБрдЫ рдФрд░ рд╣реИред
@lorenzodallavecchia рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП override рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ $# define | override рд╣реИред define рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЗрд╡рд▓ define рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИред

@ рдирд┐рди-рдЬрд┐рди рдЖрдкрдХреЗ рдореЙрдбрд▓ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЕрднреА рднреА рдХрд╛рдиреВрдиреА рд╣реИ, рд╣реИ рдирд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

class Base {
  myMethod () { ... }
}

class Overridden extends Base {
  // this would not fail because this is interpreted as define | override.
  myMethod () { ... }
}

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк override рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдЪреЗрдХрд┐рдВрдЧ рд╕реЗ рдСрдкреНрдЯ-рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЧ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдирд╛ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП override | define рдЬреИрд╕рд╛ рд╣реА рд╣реИред

@bioball рд╣рд╛рдБ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

@ рд╕реИрдо-рдПрд╕ 4 рдПрд╕ рдЗрдХрд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╕ рдмрдврд╝рд╛рддреА рд╣реИред :-) рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред virtual рдХреБрдЫ рдФрд░ рд╣реИред

рдореБрдЭреЗ рдЕрднреА рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ ... рдпрд╣ рд╕реА # рдореЗрдВ virtual рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ:

The virtual keyword is used to modify a method, property, indexer, or event declaration and allow for it to be overridden in a derived class.

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛ, рдЬрд╣рд╛рдВ, рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ virtual рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ define рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

(рдХреНрдпреЛрдВ define ? рдореИрдВрдиреЗ рд╡рд╣ рдХреАрд╡рд░реНрдб рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ)

рдореИрдВрдиреЗ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЗрд╕ рдереИрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрд┐рд╕реА рдХреЛ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

class Animal {
    move(meters:number):void {
    }
}

class Snake extends Animal {
    override move(meters) {
    }
}

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, move рдореЗрдВ рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ ( void ) рд╣реЛрдЧрд╛ рдФрд░ meters рдХрд╛ рднреА рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдЬрд┐рд╕ рдмрдбрд╝реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╣ рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рджреВрд░, рд╣рдорд╛рд░реЗ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ @override рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдмреЗрдореЗрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИред рдХреЛрдИ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

class Animal {
    move(meters:number):number {
    }
}

class Snake extends Animal {
    override move(meters, time:number) {
    }
}

рдореЗрд░реЗ рдпрд╣рд╛рдВ рдЖрдиреЗ рдФрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЛ рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рд╣рдо рдПрдХ рд▓рдВрдмреЗ рдкреНрд░рд╡рд╛рд╕ рдореЗрдВ рд╣реИрдВ)ред рдпрд╣ рдХрд╛рдлреА рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред

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

@shicks рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╕реНрддреБрддрдГ рдХрд┐рд╕реА рднреА рдЖрдпрд╛рддрд┐рдд рдЪрд░ рдпрд╛ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рдЕрдореВрд░реНрддрддрд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдирд╛ DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред

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

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

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

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

kyasbal-1994 picture kyasbal-1994  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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