Typescript: рд╕реБрдЭрд╛рд╡: рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЬреБрд▓ре░ 2014  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

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

// Error, 'Derived' declaration must be after 'Base'
class Derived extends Base { }
class Base { }

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

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

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

рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдмрд╕ рд╣рдорд╛рд░реЗ 2 ┬в

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

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

рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдмрдВрдз рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреНрд░рдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдеред

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

# 274 рд╕реЗ рдЬреЛрдбрд╝рдирд╛ред рд╣рдореЗрдВ рдпрд╣ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рдпрдо рдФрд░ рджрд╛рдпрд░реЗ рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ

рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдорд╛рдорд▓рд╛ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ; рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реЗ рдкрд╣рд▓реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

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

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

рдпрд╣рд╛рдБ рдХреБрдЫ рдХрдерди рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджреЗрд╢ рджреЗрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ:

class X extends Y {} // ensure Y is defined in prior file
module { new X(); } // ensure X is defined in prior file
class S { static z = new Z(); } // ensure Z is defined in prior file

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

PS рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИред

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

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

рд░рди рдЯрд╛рдЗрдо рдореЗрдВ @sparecycles рдХреЗ рдлрдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕реНрдХреЛрдк рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдлрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВред рдЪрд░ рднреА рдлрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрд░рдВрднрд┐рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЕрдм рдЖрд░рдВрднреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ # 274 рдХреЗ рддрд╣рдд рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓реЗрдЯ рдФрд░ рдХрд╛рдВрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдЖрджреЗрд╢ рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрди рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
https://github.com/Microsoft/TypeScript/blob/master/src/compiler/checker.ts#L329

рд╣рдореЗрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ :)

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

рдлрдВрдХреНрд╢рди рдЙрддреНрдерд╛рдкрди рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рд╕рд┐рдВрдЧрд▓ рдлрд╛рдЗрд▓ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ .html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреНрд░рдо рдЪреБрдирдирд╛ рдПрдХ рдорд╛рдирд╡ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ /// <reference> рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЗрди -рдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

рддрдм рд╣рдореЗрдВ рдСрд░реНрдбрд░ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо (рд╡рд┐рдХрд▓реНрдк рдХрд╛) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдСрд░реНрдбрд░ рд╢рд╛рдпрдж рдЧрд▓рдд рд╣реИ?

рд╣рд╛рдБред рд╣рдореЗрдВ рдЖрджреЗрд╢ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐ред

рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рд╣реА рдореБрд╣рд╛рд╡рд░рд╛ рдХреНрдпрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ declare class ?

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

class Alpha {
    static myFriendBeta = new Beta();   
}

class Beta {
    static myFriendAlpha = new Alpha(); 
}

рдЖрдк рдЗрд╕реЗ рдХреНрд▓реЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

class Alpha {
}

class Beta {
    static myFriendAlpha = new Alpha();
}

module Alpha {
    export var myFriendBeta = new Beta();
}

рдареАрдХ рд╣реИ, рдЗрд╕ рдирд┐рдпрдо рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ 'рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП'?

рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рдЬреИрд╕реЗ

var x = M.fn(); // Should error
module M {
    export function fn() {}
}

Enum рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ

var x = E.A; // Should error
enum E { A }

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

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ @sparecycles рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рддрдм рд╣рдореЗрдВ рдСрд░реНрдбрд░ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо (рд╡рд┐рдХрд▓реНрдк рдХрд╛) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдСрд░реНрдбрд░ рд╢рд╛рдпрдж рдЧрд▓рдд рд╣реИ?

"рдСрд░реНрдбрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ" рдореЗрдВ tsconfig рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрд░реНрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдЙрддрдиреА рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ: рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрд╕ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдСрд░реНрдбрд░ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ _fixed_ рд╣реЛ рдЬрд╛рдПрдЧреАред

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

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

рд╡реИрд╕реЗ, рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ A.ts рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрдн B.ts рдФрд░ X.ts рдореЗрдВ A.ts рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдСрд░реНрдбрд░ [B, A, X] рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдпрд╣ B.ts рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрджреЗрд╢ [рдП, рдмреА, рдПрдХреНрд╕] рд╣реЛрдЧрд╛ред (рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЖрджреЗрд╢ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред) рдЗрд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдирд╛рдЬреБрдХ рд╣реЛрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рди рдмреА рдпрд╛ рдП рдХреЗ рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдлрд▓ рд╣реЛрдЧрд╛ред

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

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

(рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ .js рдХреА рд╕реВрдЪреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ / рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдорд▓реНрдЯреА-рдлрд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ (рдбреАрдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЛрдб рдЗрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ C # рдореЗрдВ рд╣реИред рдпрджрд┐ рд╡рд╣рд╛рдБ рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрдЫреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рд░рдЬрди рдХреЗ рд╕реАрд╕реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рджреЛ рд░рди рд╣реИрдВред)

рдПрдорд┐рдЯ-рдСрд░реНрдбрд░ рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдорд┐рдЯ-рдСрд░реНрдбрд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рджреЛрдиреЛрдВ рдЪреЗрддрд╛рд╡рдиреА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдЧреА ... рд╣рд╛рдБ?

рдореИрдВ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рдХреЛрдб рдЖрдзрд╛рд░ (рд▓рдЧрднрдЧ 80 .ts рдлрд╝рд╛рдЗрд▓реЛрдВ) рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдХреНрд╕рд░ рдмрд╛рд░-рдмрд╛рд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрдкрдиреА рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреЛрдИ <reference> рдЯреИрдЧ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдРрдк рдореЗрдВ рдХреЗрд╡рд▓ 1 рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдореЗрд░реА рд░рдЪрдирд╛ рд░реВрдЯ) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ, рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рддреА рд╣реИрдВ (рдЬреИрд╕реЗ Array.prototype.distinct рдЬреЛрдбрд╝рдирд╛) рдФрд░ рдмрд╛рдХреА рд╕рд┐рд░реНрдл рдХреНрд▓рд╛рд╕ / рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред

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

рдХреНрдпрд╛ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ --looseSorting рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреАрдЪрд░ рдХреЗ рдмрд╛рдж рдХрд╛рдлреА рдорд╛рдВрдЧ рд╣реИред

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

рдЙрддреНрд╕рд░реНрдЬрд┐рдд JS:

class C {
    [C.p] () {}  // Use before definition
    [C.p+ C.e]() {}  // Use before definition
    [D.f] () {}  // Use before definition
}
C.p = 10;
C.e = 20;

class D {
}
D.f = "hi";

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

рдЖрдЬ рд╣рдо рдЬрд┐рд╕ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ:

function f() {
    function g() {
        i = 10;
    }

    let i = 20;
    g();
}

g i рдХреЗ рдЙрдкрдпреЛрдЧ / рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

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

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

function f() {
    if (true) {
        g(); // iirc, g executes in Chrome, and is undefined in Firefox
        function g() {
        }
        g(); // works in both browsers
    }
}

Https://github.com/Microsoft/TypeScript/issues/2854 рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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

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

рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдмрд╕ рд╣рдорд╛рд░реЗ 2 ┬в

рдореБрдЭреЗ рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдорд╛рдирдХ JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ, рдХрд┐рд╕реА рдХреЛ рднреА?

@MrGuardian рдУрдкреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд repro рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдПрдХ рдирдП рдореБрджреНрджреЗ рдпрд╛ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмреЗрд╣рддрд░ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ?

(# 12673) рдпрд╣рд╛рдВ рджреЛ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ IMO рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

`` ``
рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯ
{
_b = this._a; // рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдХреЛрдИ рддреНрд░реБрдЯрд┐ / рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ
_a = 3;

static _B = Test._A; // undefined, no error/warning
static _A = 3;

method()
{
    let a = b; // Block-scoped variable 'b' used before its declaration
    let b = 3;
}

}
`` ``

@ рдкреНрд░рд╡рдХреНрддрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж!

12,673

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