рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0

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



рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рдЬрд╛рд░реА! рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдбрд╝рдХ рдкрд░ рдПрдХ рдирдпрд╛ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

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

рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ ред рдпрджрд┐ рдЖрдк рдЕрднреА TypeScript 3.0 рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ NuGet рд╕реЗ рдпрд╛ npm рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

npm install -g typescript 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд░реНрдерди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ:


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

рд╕рдВрд╕реНрдХрд░рдг 3.0 рдЕрд╡рд▓реЛрдХрди


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

рддреЛ рддрдм рд╕реЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд╛рдЗрдкрд╕реНрдЯрд╛рдЗрдк 3.0 рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рд▓рд╛рдпрд╛ рдЧрдпрд╛, рдЬреИрд╕реЗ рдХрд┐ async / рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЬрдирд░реЗрдЯрд░, рдФрд░ рдмрд╛рдХреА / рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░?

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.1 рдореМрд▓рд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рдмрди рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз ( keyof ), рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ ( T[K] ) рдФрд░ рдореИрдк рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ ( { [K in keyof T]: } T[K]} ) - рдпрд╣ рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдПрдХреНрдЯ, рдПрдореНрдмрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЛрджрд╛рд╢ рдФрд░ рдЕрдиреНрдпред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.2 рдФрд░ 2.3 рд░рд┐рд▓реАрдЬ рдиреЗ рдорд┐рдХреНрд╕рд┐рди рдХреНрд▓рд╛рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ, object рдкреНрд░рдХрд╛рд░ (рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдЬреЛ рдПрдХ рдЖрджрд┐рдо рдирд╣реАрдВ рд╣реИ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреЗрд╢ рдХрд┐рдпрд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиред рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рд╕рд╛рдордЧреНрд░реА рдФрд░ рдкреЙрд▓рд┐рдорд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.3 рдиреЗ this рдкреНрд░рдХрд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ Vue рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ checkJs , рдФрд░ checkJs рдзреНрд╡рдЬ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП checkJs рдЧрдпрд╛ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.4 рдФрд░ 2.6 рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдВрднреАрд░рддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреБрдЫ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред - --strictFunctionTypes рдзреНрд╡рдЬ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдЧрдИ рдереА, рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ --strictFunctionTypes рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред 2.7 рд░рд┐рд▓реАрдЬ рдореЗрдВ, рдХрдбрд╝рд╛рдИ рдХреА рдУрд░ рд░реБрдЭрд╛рди рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ - --strictPropertyInitialization рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.8 рд╕рд╢рд░реНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк-рдЖрдзрд╛рд░рд┐рдд рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ 2.9 рд░рд┐рд▓реАрдЬ рдХреАрдСрдлрд╝ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

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

рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ


  • рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ
    • --build рдореЛрдб
    • рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рдмрдВрдзрди
    • рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛
  • рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛
  • рдирдИ рдЯрдкрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  • unknown рдЯрд╛рдЗрдк рдХрд░реЗрдВ
  • рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдирд┐рджрд╛рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рддрд╛рд╡рд░рдг
    • рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдПрд░рд░ рд░реЗрдВрдЬ
    • рдмреЗрд╣рддрд░ рдирд┐рджрд╛рди рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ
  • defaultProps рдореЗрдВ defaultProps рд▓рд┐рдП рд╕рдорд░реНрдерди
  • рдирд┐рд░реНрджреЗрд╢ /// <reference lib="..." />
  • рд╕рдВрдкрд╛рджрдХ рдХреА рдЧрддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░
    • рдЖрдпрд╛рдд рдмрдпрд╛рдиреЛрдВ рдХреЛ рдирд╛рдо рджреЗрдирд╛
    • рдЕрдВрддрд┐рдо рдЯреИрдЧ рдЕрдВрдд рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рд░реВрдкрд░реЗрдЦрд╛
    • рдЕрдЧрдореНрдп рдХреЛрдб рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░
  • рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди
    • unknown рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ
    • рдПрдкреАрдЖрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ


рдХрд╛рдлреА рдмрд╛рд░, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ src рдФрд░ test рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ client рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХрд╛ рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ рдХреЛрдб рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ shared рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рддрдерд╛рдХрдерд┐рдд "рдПрдХрд▓ рднрдВрдбрд╛рд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдЬрдЯрд┐рд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░ рд╣реИрдВред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдЬрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ" рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?


рдпрд╣рд╛рдБ рдПрдХ tsconfig.json рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред

 // ./src/bar/tsconfig.json { "compilerOptions": { // Needed for project references. "composite": true, "declaration": true, // Other options... "outDir": "../../lib/bar", "strict": true, "module": "esnext", "moduleResolution": "node", }, "references": [ { "path": "../foo" } ] } 

рдЗрд╕рдХреЗ рджреЛ рдирдП рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ: composite рдФрд░ references ред

references рдлрд╝реАрд▓реНрдб рдХреЗрд╡рд▓ рдЕрдиреНрдп tsconfig.json рдлрд╝рд╛рдЗрд▓реЛрдВ (рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдирд┐рд╣рд┐рдд рд╣реИрдВ) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВред рдпрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ path рдлрд╝реАрд▓реНрдб ("рдкрде") рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ front-end рдкреНрд░реЛрдЬреЗрдХреНрдЯ shared рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЛрд░ рдкрд░ shared рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЛрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди core рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЧрдП рд╣реИрдВ (рдпрд╛рдиреА) .d.ts рдлрд╝рд╛рдЗрд▓реЗрдВ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрд╢реНрд╡рд╛рд╕рди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, composite рдзреНрд╡рдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рднреА declaration рдзреНрд╡рдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред

-рдмрд┐рд▓реНрдб рдореЛрдб


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

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

tsc --build (рдпрд╛ рдЙрд╕рдХреЗ рдЙрдкрдирд╛рдо, tsc --build tsc -b ) рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрд╢реНрд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рднреАред рдирдП рдмрд┐рд▓реНрдб рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, - --build рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдЭрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  • --verbose : рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред
  • --dry : рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ --dry ( --verbose рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧреА)ред
  • тАУclean : рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ тАУclean рдХрд░рддрд╛ рд╣реИред
  • --force : рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреВрд░реНрдг, рдЧреИрд░-рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред

рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рдмрдВрдзрди


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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ / index.ts рдФрд░ server / index.ts рджреЛрдиреЛрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ / index.ts рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



... рддреЛ рдЬрдм рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо ...



... рдирд╣реАрдВ ...



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рд╣рдордиреЗ рджреЛ рдмрд╛рд░ рд╕рд╛рдЭрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рд╡реНрдпрддреАрдд рдХрд┐рдпрд╛ рдФрд░ рд▓рд┐рдмрд╛рд╕ / рдХреНрд▓рд╛рдЗрдВрдЯ / рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд▓рд┐рдм / рд╕рд░реНрд╡рд░ / рд╕рд░реНрд╡рд░ рд╕реЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╕реНрддрд░ рдЬреЛрдбрд╝рд╛ред

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

рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tsconfig.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ:

  1. рд╕рд╛рдЭрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рдФрд░ рдпрд╣ рдХрд┐ рдЬрдм .. рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ .d.ts рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдПрдХ рдбрдмрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдЪрд▓рд╛рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЧрд▓рддреА рд╕реЗ рд╕рднреА рд╕рд╛рдЭрд╛ рд╕рд╛рдордЧреНрд░реА рд╕рд╣рд┐рддред

рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛


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

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

рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛


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

 function call(fn, ...args) { return fn(...args); } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЙрд▓ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрдВ рдХреЙрд▓ 0, рдХреЙрд▓ 1, рдХреЙрд▓ 2, рдЖрджрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

 function call0(fn) { return fn(); } function call1(fn, param1) { return fn(param1); } function call2(fn, param1, param2) { return fn(param1, param2); } function call3(fn, param1, param2, param3) { return fn(param1, param2, param3); } 

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

 // TODO (billg): 5 overloads should *probably* be enough for anybody? function call<T1, T2, T3, T4, R>(fn: (param1: T1, param2: T2, param3: T3, param4: T4) => R, param1: T1, param2: T2, param3: T3, param4: T4): R function call<T1, T2, T3, R>(fn: (param1: T1, param2: T2, param3: T3) => R, param1: T1, param2: T2, param3: T3): R function call<T1, T2, R>(fn: (param1: T1, param2: T2) => R, param1: T1, param2: T2): R function call<T1, R>(fn: (param1: T1) => R, param1: T1): R; function call<R>(fn: () => R, param1: T1): R; function call(fn: (...args: any[]) => any, ...args: any[]) { return fn(...args); } 

рдУрд╣! рд╣рдЬрд╛рд░ рдУрд╡рд░рд▓реЛрдб рд╕реЗ рдПрдХ рдФрд░ рдореМрдд! рдпрд╛ рдпреВрдЬрд░реНрд╕ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдЙрддрдиреЗ рдУрд╡рд░рд▓реЛрдбреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рдЖрдкрдХреЛ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдмрд╛рдХреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЯрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдУрд╡рд░рд▓реЛрдбреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдХреА рдкреИрд░рд╛рдореАрдЯрд░ ... fn рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЖрд░реНрдЧреНрд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рд╕рд░рдгреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ... args рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдЧреБрдЬрд░рддрд╛ рд╣реИ:

 function call<TS extends any[], R>(fn: (...args: TS) => R, ...args: TS): R { return fn(...args); } 

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

 function foo(x: number, y: string): string { return (x + y).toLowerCase(); } // The `TS` type parameter is inferred as `[number, string]` call(foo, 100, "hello"); 

рдЬрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдПрд╕ рдХреЛ [рд╕рдВрдЦреНрдпрд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ] рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдХреА рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдЯреАрдПрд╕ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 function call(fn: (...args: [number, string]) => string, ...args: [number, string]): string 

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

 function call(fn: (arg1: number, arg2: string) => string, arg1: number, arg2: string): string 

рдЗрд╕рд▓рд┐рдП, рдЕрдорд╛рдиреНрдп рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛:

 function call<TS extends any[], R>(fn: (...args: TS) => R, ...args: TS): R { return fn(...args); } call((x: number, y: string) => y, "hello", "world"); // ~~~~~~~ // Error! `string` isn't assignable to `number`! 

... рдФрд░ рдЕрдиреНрдп рддрд░реНрдХреЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 call((x, y) => { /* .... */ }, "hello", 100); // ^ ^ // `x` and `y` have their types inferred as `string` and `number` respectively. 

... рд╣рдо рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдпреЗ рдХрд╛рд░реНрдп рдмрд╛рд╣рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 function tuple<TS extends any[]>(...xs: TS): TS { return xs; } let x = tuple(1, 2, "hello"); // has type `[number, number, string]` 

рд▓реЗрдХрд┐рди рдПрдХ рдХреИрд╡рд┐рдЯреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдерд╛ ...

рдирдИ рдЯрдкрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


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

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

 // Both `y` and `z` are optional here. function foo(x: boolean, y = 100, z?: string) { // ... } foo(true); foo(true, undefined, "hello"); foo(true, 200); 

рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рдХреА рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

 // `rest` accepts any number of strings - even none! function foo(...rest: string[]) { // ... } foo(); foo("hello"); foo("hello", "world"); 

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

 // Accepts no parameters. function foo() { // ... } foo(); 

рдЗрд╕рд▓рд┐рдП, рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдм рдЯрдкрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрддреНрд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

 /** * 2D, or potentially 3D, coordinate. */ type Coordinate = [number, number, number?]; 

рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдХрд╛рд░ 2 рдирд╛рдо рдХреА рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЯрдкрд▓ рдмрдирд╛рддрд╛ рд╣реИ - рдЗрдВрдбреЗрдХреНрд╕ 2 рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЪреВрдВрдХрд┐ рдЯреНрдпреВрдкрд▓реНрд╕ рдЕрдкрдиреА рд▓рдВрдмрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреВрдбрд┐рдиреЗрдЯ рдЯреНрдпреВрдкрд▓ рдХреА рд▓рдВрдмрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рдЯрд╛рдЗрдк 2 рдХреА рд╣реИред 3ред

рджреВрд╕рд░реЗ, рдмрд╛рдХреА рддрддреНрд╡ рдЕрдм рдЯрдкрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

 type OneNumberAndSomeStrings = [number, ...string[]]; 

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

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

 type Foo = [...number[]]; // Equivalent to `number[]`. 

рдЕрдВрдд рдореЗрдВ, рдЯреНрдпреВрдкрд▓ рдЕрдм рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЬрдм рдмрд╛рд╣рд░реА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЦрд╛рд▓реА рдЯрдкрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ []: рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 type EmptyTuple = []; 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЦрд╛рд▓реА рдЯрдкрд▓ рдХреА рд▓рдВрдмрд╛рдИ 0 рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдордг рдХрднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдирд┐рджрд╛рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рддрд╛рд╡рд░рдг


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

рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдПрд░рд░ рд░реЗрдВрдЬ


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

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



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



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

рдмреЗрд╣рддрд░ рдирд┐рджрд╛рди рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.9 рдХреА рд░рд┐рд╣рд╛рдИ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ, рд╣рдордиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ , рдФрд░ 3.0 рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХреЗ рджреМрд░рд╛рди рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╣рдореЗрдВ рдмреБрджреНрдзрд┐рдорд╛рди, рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдЯреАрдХ рддреНрд░реБрдЯрд┐ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрдШ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрд░реЛрдд рд╕реЗ рд╕реАрдзреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред





рдЕрдЬреНрдЮрд╛рдд рдЯрд╛рдЗрдк рдХрд░реЗрдВ


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

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдХрдареЛрд░рддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

 let foo: any = 10; // All of these will throw errors, but TypeScript // won't complain since `foo` has the type `any`. foo.x.prop; foo.y.prop; foo.z.prop; foo(); new foo(); upperCase(foo); foo `hello world!`; function upperCase(x: string) { return x.toUpperCase(); } 

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рдЕрдЬреНрдЮрд╛рдд рдирд╛рдордХ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣, рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдпрд╛рди рдХреЗ рдмрд┐рдирд╛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред unknown, .

unknown any, foo :

 let foo: unknown = 10; // Since `foo` has type `unknown`, TypeScript // errors on each of these locations. foo.x.prop; foo.y.prop; foo.z.prop; foo(); new foo(); upperCase(foo); foo `hello world!`; function upperCase(x: string) { return x.toUpperCase(); } 

, , , .

 let foo: unknown = 10; function hasXYZ(obj: any): obj is { x: any, y: any, z: any } { return !!obj && typeof obj === "object" && "x" in obj && "y" in obj && "z" in obj } // Using a user-defined type guard... if (hasXYZ(foo)) { // ...we're allowed to access certain properties again. foo.x.prop; foo.y.prop; foo.z.prop; } // We can also just convince TypeScript we know what we're doing // by using a type assertion. upperCase(foo as string); function upperCase(x: string) { return x.toUpperCase(); } 

: , , , {} | null | undefined, unknown , :

 type Arrayify<T> = T extends any ? Array<T> : never; type A = Arrayify<{} | null | undefined>; // null[] | undefined[] | {}[] type B = Arrayify<unknown>; // unknown[] 

defaultProps JSX


: .d.ts React , , .

- TypeScript/JavaScript , , . , . , .

 function loudlyGreet(name = "world") { // Thanks to the default initializer, `name` will always have type `string` internally. // We don't have to check for `undefined` here. console.log("HELLO", name.toUpperCase()); } // Externally, `name` is optional, and we can potentially pass `undefined` or omit it entirely. loudlyGreet(); loudlyGreet(undefined); 

React (props). React , defaultProps, props.

 // Some non-TypeScript JSX file import * as React from "react"; import * as ReactDOM from "react-dom"; export class Greet extends React.Component { render() { const { name } = this.props; return <div>Hello ${name.toUpperCase()}!</div>; } static defaultProps = { name: "world", }; } // Notice no `name` attribute was specified! // vvvvvvvvv const result = ReactDOM.renderToString(<Greet />); console.log(result); 

, <Greet /> name. Greet, name ┬лworld┬╗, : Hello world!.

, TypeScript , defaultProps - JSX. render:

 export interface Props { name?: string } export class Greet extends React.Component<Props> { render() { const { name } = this.props; // Notice the `!` ------v return <div>Hello ${name!.toUpperCase()}!</div>; } static defaultProps = { name: "world"} } 

, .

TypeScript 3.0 JSX, LibraryManagedAttributes. , , TypeScript, JSX. , , React defaultProps , , propTypes.

 export interface Props { name: string } export class Greet extends React.Component<Props> { render() { const { name } = this.props; return <div>Hello ${name.toUpperCase()}!</div>; } static defaultProps = { name: "world"} } // Type-checks! No type assertions needed! let el = <Greet /> 

, . defaultProps, Partial , - (stateless function components, SFC), defaultProps Partial , . defaultProps (. ) SFC ES2015:

 function Greet({ name = "world" }: Props) { return <div>Hello ${name.toUpperCase()}!</div>; } 

, . TypeScript, .d.ts DefinitelyTyped , , @types/react . DefinitelyTyped, .

/// <reference lib="..." />


, , , (polyfills) тАФ , API , ( .d.ts), API. , TypeScript lib.d.ts , --lib --target. , core-js lib.es2015.d.ts.

TypeScript 3.0 , API, , : /// <reference lib="..." />.

, Promise ES2015

 /// <reference lib="es2015.promise" /> export {}; 

, TypeScript 3.0 , lib.es2015.promise.d.ts, , Promise .


, , TypeScript , . TypeScript JavaScript , Visual Studio, Visual Studio Code TypeScript. , , , Go to Definition (┬л ┬╗) . TypeScript 3.0 .


, , .

 import * as dependency from "./dependency"; // look at all this repetition! dependency.foo(); dependency.bar(); dependency.baz(); 

, , , , .

 import { foo, bar, baz } from "./dependency"; // way lower in the file... foo(); bar(); baz(); 

, , . TypeScript 3.0 , .




TypeScript , JSX:

  • JSX;
  • JSX.




TypeScript тАФ , .


, API .

, TypeScript 3 , . , API .

unknown тАФ


unknown тАФ , , , .

API


  • LanguageService#getSourceFile , . . #24540 .
  • TypeChecker#getSymbolDisplayBuilder . . #25331 . emitter ( ) node builder.
  • escapeIdentifier unescapeIdentifier . API , . , , . escapeLeadingUnderscores unescapeLeadingUnderscores, , ( ┬л┬╗ __String string ).
  • TypeChecker#getSuggestionForNonexistentProperty, TypeChecker#getSuggestionForNonexistentSymbol TypeChecker#getSuggestionForNonexistentModule , API. . #25520 .

рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ


TypeScript . , , , DefinitelyTyped , . , .

, TypeScript ( , ). , , JavaScript. , TypeScript, .

, , , , , Twitter . .

, TypeScript, ! . , , TypeScript , .

!
TypeScript

Source: https://habr.com/ru/post/hi420761/


All Articles