Language-tools: рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдкрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдорд╛рд░реНрдЪ 2020  ┬╖  37рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sveltejs/language-tools

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

рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐

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

рдореМрдЬреВрджрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг/рд╕рдорд╛рдзрд╛рди

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

https://github.com/alexprey/sveltedoc-parser

svelte рдлрд╝рд╛рдЗрд▓ рдХреЗ html рднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП htmlparser2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡реНрдпрд╛рдкрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рдЧреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
JSON-рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

https://github.com/ArdenIvanov/svelte-intellisense рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

https://github.com/halfnelson/svelte2tsx

рдПрдХ svelte рдШрдЯрдХ рдХреЗ HTMLx рднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП svelte рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ HTMLx рдкреНрд▓рд╕ рдореВрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рдЧ рдХреЛ рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рд╕рд╛рде рдПрдХ tsx рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

https://github.com/simlrh/svelte-language-server/blob/feature/extend-ts-support/src/plugins/ts-svelte/service.ts (svelte-language-server рд╕реЗ рдПрдХ рдХрд╛рдВрдЯрд╛) рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ svelte-files рдХреА рд╢реИрдбреЛ-рдЯреАрдПрд╕рдПрдХреНрд╕-рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВред рдпрд╣ рддрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдореВрд▓ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЛ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди tsx-file рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдЗрд╕рд▓рд┐рдП рдЙрддреНрдкрдиреНрди tsx рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рд╕рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдмрджрд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

https://github.com/halfnelson/svelte-type-checker-vscode рдПрдХ рдЕрдиреНрдп рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ svelte2tsx-library рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

https://github.com/marcus-sa/svelte-ts

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╡рд░рдг:

рд╕рдВрдХрд▓рдХ:

  1. рд╕рдВрдХрд▓рдХ рд╕рднреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ
  2. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдорд╛рдиреНрдп JS рдФрд░ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдЪрд░рдг 2 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рдпрд╣ TS рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд JS рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ
  5. Svelte рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
  6. рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдг рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдХрд▓рди рдХреИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ HTML AST рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЯрд╛рдЗрдк-рдЪреЗрдХрд░:

  1. рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдХреИрд╢реНрдб рдПрдПрд╕рдЯреА рдореЗрдВ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИред
  2. рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдПрдХ рдорд╛рдиреНрдп рд╡рд░реНрдЧ рд╣реИ рдЬреЛ SvelteComponent рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  3. рд╡реИрдз рдШреЛрд╖рдгрд╛рдУрдВ, рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдЖрджрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВред

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

рдареАрдХ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдФрд░ рдХреБрдЫ рдкреАрдЖрд░ рдХреЛ рдХреБрдЫ рдХреЛрдб рдХреЗ рдкреБрдирд░реНрдЧрдарди рдФрд░ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░ рд╕рдХреЗрдВред

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

рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА Svelte рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

svelte2tsx рд╕реНрдЯрд╛рдЗрд▓/рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ htmlx рднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП svelte рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
svelte-ts рджреВрд╕рд░реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ svelte рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЛрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред

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

рдПрдХ рдЧреИрд░-рдЯрд╛рдЗрдкрдЪреЗрдХрд┐рдВрдЧ рдЯреАрдПрд╕ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдЖрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реЗрд▓реНрдЯ рд╕рдВрдХрд▓рди рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ HTMLx рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдореЗрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ Svelte рдХреЛ TS рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдПрдХ рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк рд╣реИ рдЬреЛ script рдмреНрд▓реЙрдХ рд╕реЗ рдЕрди-рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕реНрдб рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ svelte.compile рд╕реЗ рдорд╛рд░реНрдХрдЕрдк рдПрдПрд╕рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрдЪреЗрдХрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдЯрд╛рдЗрдкрдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ ) рдпрд╣ @рд╣рд╛рдлрдиреЗрд▓реНрд╕рди рдХреА рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рднрд┐рдиреНрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп TS рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, TSX рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдпрд╣ HTML рдЯреИрдЧреНрд╕ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдХреЗрд╡рд▓ рдореВрдВрдЫреЗрдВ рдЯреИрдЧ рдФрд░ Svelte рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рд╕рд╛рдорд╛рдиред рдпрд╣ Svelte рдШрдЯрдХреЛрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬреЛ new рдПрдб рдЕрдкрдиреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рджреВрд░ рд╣реЛ рдЧрдпрд╛, рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрд╡реЗрд▓реНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд╛рдЧ рдорд┐рд▓рд╛, рдФрд░ рдЖрдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рд╕реАрд░рд┐рдпрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ Svelte TS рдХреЛ

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

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╡рд╣ рдирд┐рджрд╛рди рдХреЗ рд╕рд╛рде рдереА рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рдереЗред IIRC рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЯрд╛рдЗрдкрдЪреЗрдХрд┐рдВрдЧ Svelte рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдерд╛ - VSCode рдХрд┐рд╕реА рддрд░рд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЙрдк рдПрд░рд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди TS рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдХреЗрд╡рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдкреНрд░реЙрдмреНрд▓рдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рдирд╣реАрдВред

рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рд╣реИ рдФрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреБрд░рд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ magic-string рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ source-map рдмрджрд▓ рдЧрдпрд╛ред рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рд╢реБрд░реВ рд╕реЗ рд╣реА рдПрдХ рдмрд░реНрдмрд╛рдж рдкреНрд░рдпрд╛рд╕ рдерд╛! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдЙрд╕ рд░реЗрдкреЛ рдХреА ts рд╢рд╛рдЦрд╛ рдкрд░ рд╣реИ, рди рдХрд┐ master ред

рдпрд╣рд╛рдБ рдКрдкрд░ рд╕рдВрджрд░реНрднрд┐рдд 4 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:

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

рдЕрд╡рд▓реЛрдХрди

рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ:

  • DocumentManager рдЦреЛрд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
  • TypescriptPlugin рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдИрд╡реЗрдВрдЯ ("doHover" рдЖрджрд┐) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП DocumentManager рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реАрдзреЗ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: рдпрд╣ wrapFragmentPlugin рд╕рд╛рде рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ TypescriptPlugin рдХреЗрд╡рд▓ script рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг (рдорд╛рдЙрд╕/рдкрд╛рда рдХрд░реНрд╕рд░ рдХрд╛) wrapFragmentPlugin рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред
  • TypescriptPlugin service рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдЖрд╡рд░рдг рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЗрд╕ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реМрдВрдкрддрд╛ рд╣реИ, рдХреБрдЫ рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  • service рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде createDocument рд╡рд┐рдзрд┐ рд╕реЗ TypescriptPlugin ред service рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рдирдХреНрд╢рд╛ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдордп рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ DocumentsManager рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИред рд╣рд░ рдмрд╛рд░ service рд╕реЗ TypescriptPlugin service рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, service рджрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рдж)ред createDocument рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрд▓рддреА рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдЕрдиреНрдп рд╡реНрдпрд╛рдкрдХ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдвреВрдВрдврддреА рд╣реИ (рдЕрдЧрд▓рд╛ рднрд╛рдЧ рджреЗрдЦреЗрдВ)ред

рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрдорд┐рдпрд╛рдВ рдФрд░ рд╡рд┐рдЪрд╛рд░

  • рдЪреВрдВрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╛рдкрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ ($) рд╕реЗ рдирд┐рдкрдЯ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред
  • рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЦреБрд▓реА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИрдВред .ts / .js рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, .svelte рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░рдг: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ .svelte рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдФрд░ ../Component.svelte.ts рдЬреИрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЧрд▓рдд рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ resolveModuleNames рдХреЛ LanguageServiceHost рдФрд░ рд╕рднреА .svelte.ts рдлрд╝рд╛рдЗрд▓ рд▓реБрдХрдЕрдк рдХреЛ .svelte рд░реВрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрдм рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рд╕рднреА рд╡реНрдпрд╛рдкрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдПрдЧреАред рдиреЛрдЯ: рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрдЧ рдХреЛ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдЕрдм рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЪрд▓реЗрдЧреА, createDocument рдпрд╣ TypescriptPlugin рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдЧреАред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдХреА рд╕рд╛рдордЧреНрд░реАред рдпрд╣ рдЕрдВрджрд░ рдПрдХ рдмрдЧ рд╣реИ wrapFragmentPlugin рд▓рдкреЗрдЯрдХрд░ рдирд╣реАрдВ openDocument ред
  • рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ "рдЧреЛ рдЯреВ рд╕реЙрд▓реНрд╡реЗрдЯ рдлрд╛рдЗрд▓" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ svelte рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрдВрдкреЛрд░реНрдЯ рдиреЗрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ $ рд╕рд╛рдЗрдиреНрд╕ рдЧреНрд░реЛрдЧ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд┐рд╕реА рддрд░рд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрджреЛрдВ рдХреЛ рдореИрдк рдХрд░рдирд╛ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкрджреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдФрд░ рдЪреБрдиреМрддреА рд╣реИ: рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕реНрдерд┐рддрд┐ рдорд╛рдирдЪрд┐рддреНрд░рдг рд╣реЛрдВрдЧреЗ: рдПрдХ рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рддрдХ, рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рд╕реЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕реНрдб рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рддрдХред рдореБрдЭреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ TypescriptPlugin (рдФрд░ рдЕрдиреНрдп) рдХреЛ рдЗрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреИрд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ - рд╢рд╛рдпрдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдЪрд░рдг рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП . рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ wrapFragmentPlugin рдмрджрд▓рдирд╛ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ред рдкреБрдирд░реНрд╡рд┐рдХреНрд░рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐, "рдЕрдкреНрд░рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди" рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ HTML рднрд╛рдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдЪрд╛рд░?

resolveModuleNames , рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдиреЗ Vetur рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ , рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдореИрдВрдиреЗ Svelte рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди Vetur рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

@dummdidumm рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЯреЗрдХ рд▓реАрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ рдкрд░ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдорди рд╣реИ? рдореБрдЭреЗ рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рджреЗрд╡ рд╕рдордп рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рднрд╛рд░реА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЫреЛрдЯреЗ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореБрджреНрджреЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред рдЬрдм рддрдХ рдХреЛрдИ рдмрдбрд╝рд╛ рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ?)

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

https://github.com/sveltejs/svelte/issues/4518 рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдУрд░реНрдЯрд╛ рдХреА рдореВрд▓ рдПрд▓рдПрд╕рдкреА рдкреЛрд╕реНрдЯ рд╕реЗ рднреА рд▓рд┐рдВрдХ рдХрд░рдирд╛

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджреЛрд╕реНрдд рд╣реВрдВ рдЬреЛ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реИ, рдХреЛрдб рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИ ЁЯШД рдореБрдЭреЗ рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд╕рдордп рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрд▓рдПрд╕рдкреАред рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред @orta рдЪреВрдВрдХрд┐ рдЖрдк рдЗрд╕ рд░реЗрдкреЛ рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рд╣реИрдВ, рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

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

рдареАрдХ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдФрд░ рдХреБрдЫ рдкреАрдЖрд░ рдХреЛ рдХреБрдЫ рдХреЛрдб рдХреЗ рдкреБрдирд░реНрдЧрдарди рдФрд░ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░ рд╕рдХреЗрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо @ryanatkn , svelete-ts рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ eslint-plugin-svelte3 рдХреЗ рдЪрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ

  1. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЗрдПрд╕ рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
    рдпрд╣рд╛рдВ рд╣рдо рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ES рдХреЗ рдирд╡реАрдирддрдо рдпрд╛ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╕ рдЯреНрд░реИрдВрдкрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдкреВрд░реНрд╡рд╕рдВрд╕рд╛рдзрд┐рдд рд╕реНрд░реЛрдд рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рджреЗрдВред
  3. рдлрд┐рд░ рд╣рдо рдкрд░рд┐рдгрд╛рдо рд╡рд░реНрд░реНрд╕ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ injected = true рдЙрджрд╛рд╣рд░рдг рдореЗрдВ ts рд╕реНрд░реЛрдд рдпрд╛ ts AST рдФрд░ рдлрд┐рд░ рдЯрд╛рдЗрдк рдЪреЗрдХ рдФрд░ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреАрди рдЯреБрдХрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдореЙрдбреНрдпреВрд▓ <script context="module"> , рдЙрджрд╛рд╣рд░рдг рдФрд░ рдореВрдВрдЫреЗрдВ (рдЯреЗрдореНрдкрд▓реЗрдЯ)ред рдореВрдВрдЫреЛрдВ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ template.js рдореЗрдВ рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ tsx рдпрд╛ рд╕рд╛рджреЗ ts рдЬреИрд╕реЗ ryanatkn рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдг, рдЬрд╣рд╛рдВ module = true , рдХреЛ template.js рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдирд╣реАрдВред

рдЗрд╕ рддрд░рд╣ рд╣рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдПрд╕рдЯреА рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ $: a = 1 рдпрд╛ $-prefixed рд╕реНрдЯреЛрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реЙрд▓реНрд╡реЗрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдпреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдЯреЙрдк-рд▓реЗрд╡рд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд╡реАрдирддрдо ES рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдирд╛рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ $: a рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

$: a = 1

```ts
рдЪрд▓реЛ рдПрдХ: рд╕рдВрдЦреНрдпрд╛
$: рдП = 1

```ts
$: a = someFunction(b) as Type

рдпрд╣ рд╕рдм рдорд╛рдиреНрдп ts рд╣реИ рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдФрд░ $-prefixed store рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ svelte/store get to Extract store type

/** injected */
let $store = getType(store)
  1. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЗрдПрд╕ рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
    рдпрд╣рд╛рдВ рд╣рдо рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ES рдХреЗ рдирд╡реАрдирддрдо рдпрд╛ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╕ рдЯреНрд░реИрдВрдкрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдкреВрд░реНрд╡рд╕рдВрд╕рд╛рдзрд┐рдд рд╕реНрд░реЛрдд рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рджреЗрдВред
  3. рдлрд┐рд░ рд╣рдо рдкрд░рд┐рдгрд╛рдо рд╡рд░реНрд░реНрд╕ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ injected = true рдЙрджрд╛рд╣рд░рдг рдореЗрдВ ts рд╕реНрд░реЛрдд рдпрд╛ ts AST рдФрд░ рдлрд┐рд░ рдЯрд╛рдЗрдк рдЪреЗрдХ рдФрд░ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ svelte-ts рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред injected = true : рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдХреЛрдб рдореЗрдВ рд╣реИ?

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреАрди рдЯреБрдХрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдореЙрдбреНрдпреВрд▓ <script context="module"> , рдЙрджрд╛рд╣рд░рдг рдФрд░ рдореВрдВрдЫреЗрдВ (рдЯреЗрдореНрдкрд▓реЗрдЯ)ред рдореВрдВрдЫреЛрдВ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ template.js рдореЗрдВ рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ tsx рдпрд╛ рд╕рд╛рджреЗ ts рдЬреИрд╕реЗ ryanatkn рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдг, рдЬрд╣рд╛рдВ module = true , рдХреЛ template.js рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдирд╣реАрдВред

рдЗрд╕ рддрд░рд╣ рд╣рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдПрд╕рдЯреА рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ $: a = 1 рдпрд╛ $-prefixed store рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реЙрд▓реНрд╡реЗрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдпреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдЯреЙрдк-рд▓реЗрд╡рд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд╡реАрдирддрдо ES рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдирд╛рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ $: a рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

$: a = 1
let a: number
$: a = 1

рдпрд╛

$: a = someFunction(b) as Type

рдпрд╣ рд╕рдм рдорд╛рдиреНрдп ts рд╣реИ рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕реНрд╡рдпрдВ let a: number рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ let a; , рд▓реЗрдХрд┐рди рддрдм рдпрд╣ any ред

рдФрд░ $-prefixed store рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ svelte/store get to Extract store type

/** injected */
let $store = getType(store)

рд╣рд╛рдБ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рдмрдирд╛рдирд╛ рдерд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ svelte-ts рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред injected = true : рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдХреЛрдб рдореЗрдВ рд╣реИ?

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

рддреЛ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ .ts-file рдФрд░ .template-file рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? .ts-file рдХреЗ рдиреАрдЪреЗ рдореВрдВрдЫреЗрдВ-рднрд╛рдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рд╣рдореЗрдВ "рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдзрд┐" -рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рднреА рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓реЗрдЧрд╛ред

рдпрд╣ eslint-plugin-svelte3 рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ ts рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рднрд╛рд╖рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ let a: number рдХреЛ рд╕реНрд╡рдпрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо let a; рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдХреЛрдИ рднреА рд╣реЛрдЧрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдорд╛рди рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рддрдХ тАЛтАЛрдирд╣реАрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред (рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╕рдВрдХрд▓рди-рд╕рдордп рдЕрдиреБрдорд╛рди рдерд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ)

let a; // type is "any" initially
$: a = 5;
a; // type is now "number", good
const cb = () => a; // type is implicitly "any", noo

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд░реИрдЦрд┐рдХ рдХреЛрдб рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ a рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдореЗрдВ рд╡рд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддрд╛ рд╣реИред

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдЙрджрд╛рд╣рд░рдг

рдмрд┐рд▓реНрдХреБрд▓, рдпрд╣реА рдореЗрд░реА рдЪрд┐рдВрддрд╛рдПрдБ рдереАрдВред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @ jasonlyu123 рдиреЗ рдмрддрд╛рдпрд╛, рд╣рдо рдХреЗрд╡рд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ( = рдмрд╛рдж рд╕рдм рдХреБрдЫ)ред

рдкрд╣рд▓реЗ

$: a = true;

рдмрд╛рдж рдореЗрдВ

let a = true;
$: a = true;

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

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ рдХрд┐ @ jasonlyu123 рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ред рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

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

рдПрдордПрдЪ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреБрдо рд╕рд╣реА рд╣реЛред рдпрд╣ рд╕рдмрд╕реЗ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдЪреАрдЬ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдЧрд▓рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ string рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдШ рдХреЗ рдмрдЬрд╛рдп рд╣реИ ( 'a' | 'b' )ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдпреЗ рдорд╛рдорд▓реЗ рдЗрддрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЬрд╛рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдкрд╣рд▓реЗ рд▓реЗрдмрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:

$: a = 1
$: a = 2

рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдУ

/** injected  */
let a = 1
$: a = 2

рдореИрдВ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ " $: рдХреЛ let рд╕реЗ рдмрджрд▓рдиреЗ рдкрд░ "рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкрд░рд┐рднрд╛рд╖рд╛" рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛ред рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ $: рдХреЛ let рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдХрд┐рд╕реА рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ

$: a = 'const1'

рдЙрдкрд░рд╛рдВрдд

let a : AskUserForType
$: a = 'const1'

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рдмрд╛рддреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕реЛрдЪрддрд╛ рд╣реИ, рдХреБрдЫ рд╕реАрдЦрд╛

рд╣рд╛, рд╕реНрдорд╛рд░реНрдЯ рд╡рд┐рдЪрд╛рд░, $: рдХреЛ let рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдореИрдВ рдРрд╕реА рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд╣реА рдирд╣реАрдВ, рд╣рдореЗрд╢рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ "рдкреБрди: рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" - рддреНрд░реБрдЯрд┐ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рд╡реВрдкреНрд╕, рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░ рдХреЛ рджреЛ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛" рдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ - рдпрд╛ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛрдЧрд╛ рдФрд░ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реЛрдЧреА?

рдЕрдЪреНрдЫрд╛, рдореИрдВ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдХрд┐ рд▓реЗрдмрд▓ рдХреЛ рдмрджрд▓рдирд╛ рдпрд╛ рддреЛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред (рдЪреВрдВрдХрд┐ break $ рдХрднреА рднреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛?)

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

рдареАрдХ рд╣реИ рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдПрдХ рдРрд╕рд╛ рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдпрд╛ "рдкреБрдирдГ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ" - рдмрд╛рдж рдореЗрдВ рдлреАрдЪрд░ рдзреНрд╡рдЬ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реИред

@halfnelson рдиреЗ https://github.com/halfnelson/svelte-type-checker-vscode рдореЗрдВ рдЕрдкрдиреЗ svelte2tsx рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рд╕рдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА tsx рдХреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рдЖрдВрдд рдХреА рднрд╛рд╡рдирд╛ рд╣реИред рдлрд┐рд░ рднреА, рд╣рдо svelte2tsx рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ: рдкрд╛рд░реНрд╕рд┐рдВрдЧ-рдХрдВрдкрд╛рдЗрд▓рд┐рдВрдЧ-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рднреАред рдХреЛрдб рдХреЛ tsx рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдиреНрдп рд▓реЛрдЧ рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ?

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

рдПрдХ рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ

рдореВрд▓:

<script>
    import { createEventDispatcher } from 'svelte';
    const dispatch = createEventDispatcher();

    export let todo: string;

    function doneChange() {
        dispatch('doneChange', true);
    }
</script>

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

export default class Component {
   constructor(props: {todo: string; 'on:doneChange': (evt: CustomEvent<boolean>) => void}) {}
}

import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();

export let todo: string;

function doneChange() {
    dispatch('doneChange', !todo.done);
}

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

(рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдШрдЯрдХ-рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЪрд░ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

рдореВрд▓:

<script>const bla = {bla: 'bla'};</script>
<p>{bla.bla}</p>

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

const bla = 'bla';
const _bla = bla.bla;

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

рд╕реНрдерд╛рдиреАрдп рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдореВрд▓:

<script>function bla() {return true;}</script>
<button on:click={bla}>bla</button>

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

function bla() {return true;}
const btn = document.createElement('button');
btn.addEventListener('click', bla);

рд╡реНрдпрд╛рдЦреНрдпрд╛:
рдореВрд▓ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рддрд░рд╣ рд╣рдо addEventListener -рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рд░ рд╢реНрд░реЛрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: .addEventListener('click', ...); -> рдИрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ MouseEvent ред рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рддрддреНрд╡ рдПрдХ рдФрд░ рд╡реНрдпрд╛рдкрдХ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдирд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ (рдЕрдЧрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рднреА рджреЗрдЦреЗрдВ)ред рдХрдорд┐рдпрд╛рдВ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ Svelte рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рд╡реЗрдм-рд╡рд╛рддрд╛рд╡рд░рдг (Nativescript) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдЕрдиреНрдп рдШрдЯрдХ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

рдореВрд▓:

<script>
import Bla from './bla.svelte';
function blub() {}
</script>
<Bla bla={1} on:blubb={blub} />

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

import Bla from './bla.svelte';
function blub() {}
const bla = new Bla({bla: 1, 'on:blubb': blub});

рд╡реНрдпрд╛рдЦреНрдпрд╛:
рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдХрдХреНрд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк

рдореВрд▓:

{#each todos as todo,i (todo.id)}
    <p>{todo.text}</p>
{/each}

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

todos.forEach((todo, i) => {
    const _todoText = todo.text;
});

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

рдЕрдЧрд░

рдореВрд▓:

{#if x === 1}
    <p>if</p>
{else if x === 2}
    <p>elseif</p>
{else}
    <p>else</p>
{/if}

рдкрд░рд┐рд╡рд░реНрддрд┐рдд:

if (x === 1) {

} else if (x === 2) {

} else {

}

рд╡реНрдпрд╛рдЦреНрдпрд╛:
рдХрд╛рдлреА рдЖрддреНрдо-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХред

рдЧреБрдо рдЯреБрдХрдбрд╝реЗ

  • рд╕реНрд▓реЙрдЯреНрд╕
  • рд╡рд┐рд╢реЗрд╖ svelte:x рдШрдЯрдХ
  • рдЕрдиреНрдп рддрддреНрд╡/рдШрдЯрдХ рдирд┐рд░реНрджреЗрд╢ рдЬреИрд╕реЗ use:action , transition , bind
  • $-рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕

рддреБрдо рд▓реЛрдЧ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ? рдХреНрдпрд╛ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдФрд░ рд╕рд╛рдзреНрдп рд╣реИрдВ? рдХреНрдпрд╛ рдореБрдЭрд╕реЗ рдХреБрдЫ рдЫреВрдЯрд╛?

рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ svelte рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ SvelteComponent рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВ

import { SvelteComponent } from "svelte";

export default class Component extends SvelteComponent {
    constructor(options: ComponentOption<{ propA: string }>) {
        super(options)
    }

    $on(
        event: 'input',
        callback: (event: CustomEvent<string>) => void
    ): () => void
    $on(
        event: 'click',
        callback: (event: CustomEvent<number>) => void
    ): () => void 
    $on(
        event: string,
        callback: (event: CustomEvent<any>) => void
    ): () => void {
        return () => { }
    }
}

рдФрд░ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

interface ComponentOption<TProps, TSlot = undefined> {
    target: Element,
    props: TProps | SlotProp<TSlot>
}

type SlotOption<T> = [unknown, unknown, unknown]

interface SlotProp<TSlot> {
    $$slots: Record<string, SlotOption<TSlot>>
}

рд╡рд┐рдЦреНрдпрд╛рдд $$slots рд╢рд╛рдпрдж svelte рдХреА рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рд╕реЗ рдЦреЛрджрддрд╛ рд╣реВрдВ

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ .d.ts рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдирд┐рд▓рд╛ рдЯреАрдПрд╕/рдЬреЗрдПрд╕ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИ, рдпрд╣ рд╡реИрдз рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

<script>
onMount(() => {
    new Component({
        target: document.getElementById('foo')
    })
})
</script>

рддрддреНрд╡ рдирд┐рд░реНрджреЗрд╢

Transition , use:action рдФрд░ рдЕрдиреНрдп рддрддреНрд╡ рдирд┐рд░реНрджреЗрд╢ рдЬреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ

fade(null as Element, {  } /* option in attribute*/)

рдХрд╛ рдЗрдВрддрдЬрд╛рд░

{#await promise}
    <p>...waiting</p>
{:then number}
    <p>The number is {number}</p>
{:catch error}
    <p style="color: red">{error.message}</p>
{/await}

рдкреНрд░рддрд┐

    promise.then(number => {  number })
    promise.catch(error => { error.message })

рдмрд╛рдБрдз: рдпрд╣

<script>
let a;
</script>
<div bind:this={a}><div>

рдкреНрд░рддрд┐

let a;
onMount(() => {
 a = document.createElement('div')
})

рдЗрд╕реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрд░рдВрдд рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

рд╕рдВрджрд░реНрдн = "рдореЙрдбреНрдпреВрд▓"

рдпрд╣ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ

<script context="module">
 let count = 1;
</script>

<script>
import _ from "lodash"
let b;
</script>

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

import _ from "lodash"

let count = 1;

// any block is ok
{
    let b;
{

рдФрд░ рдпрд╣ рднреА рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЗрдПрд╕ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЯреАрдПрд╕?

рдЕрдЪреНрдЫрд╛, рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред "рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП const _bla = bla.bla; рд╕рд┐рд░реНрдл bla.bla; рдЬрд┐рд╕рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ "рдЕрдкреНрд░рдпреБрдХреНрдд var" рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдореИрдВ рдХрд┐рд╕реА рднреА рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

Vue рдХреА рдХреБрдЫ рдЯреАрдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдкреНрд▓рдЧрдЗрди рдХреА рдЦреЛрдЬ рдХрд░ рд░рд╣реА рд╣реИ - https://github.com/znck/vue-developer-experience

рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдпреЗ рдЕрдиреБрднрд╡ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ (рдЬреИрд╕реЗ рд╡реАрдЯреВрд░ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ tsserver-ish, рд╕рд╛рде рд╣реА рд╕рд╛рде html/css/рдЖрджрд┐ LSPs) рдЪрд▓рд╛рддрд╛ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдмрд╛рд╣рд░ рдХреА рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡) рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TSServer рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ .vue рдлрд╛рдЗрд▓реЗрдВ рдЧреИрд░-рдЯреАрдПрд╕ рдХреЛрдб рдХреЛ рдорд╛рд╕реНрдХ рдХрд░рдХреЗ рд╡реИрдз рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВред

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

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

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдУрд╡рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд▓рд╛рдн рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ?

рдЬреЗрдПрд╕/рдЯреАрдПрд╕ рд╕рдорд░реНрдерди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рдо рдХреЛрдб рдПрд▓рдПрд╕рдкреА рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдпрджрд┐ рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди JS/TS рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рдХреА рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд▓рдЧрдЗрди рдмрд╛рдХреА рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛ред

рд▓рд╛рдн рдХреЗ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рднреА рдЯреАрдПрд╕ рдЯреВрд▓рд┐рдВрдЧ "рдореБрдлреНрдд рдореЗрдВ" рдорд┐рд▓рддреА рд╣реИ, рдкреНрд░рддреАрдХ рдкрд░ рдЬрд╛рдПрдВ, рдлрд╛рдЗрд▓ рдореИрдкрд┐рдВрдЧ рдЖрджрд┐

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

рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде (рдмрд╛рд╣рд░-рдЕрдВрджрд░) рд╣реИрдВред

рдЕрдЧрд░ рд╣рдо рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ "рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреАрдПрд╕ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ"-рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕реНрд░реЛрдд рдореИрдкрд┐рдВрдЧ рд░рдЦреЗрдВрдЧреЗ?

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

рдореВрд▓

<script lang="typescript">
  let a = 1;
  $: b = a + 1;
</script>
<p>{b}</p>

рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛:

export default class Bla extends SvelteComponent { ... } // <- prepended, no mapping needed as far as I know
let a = 1; // <- untouched
let b = a + 1; // <- modified in place. How to map? Do we need to adjust all following code positions now to have a new offset/position?
b; // <- appended. Needs mapping from {b} inside svelte-mustache-tag to here. We can get the original position from the html ast which is part of the output of svelte.parse

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рд╕реЛрд░реНрд╕ рдореИрдкрд┐рдВрдЧ рд╕реНрдЯрдл рдирд╣реАрдВ рдХрд┐рдпрд╛ ..

Vue рдХреА рдХреБрдЫ рдЯреАрдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ рдкреНрд▓рдЧрдЗрди рдХреА рдЦреЛрдЬ рдХрд░ рд░рд╣реА рд╣реИ - https://github.com/znck/vue-developer-experience

рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдпреЗ рдЕрдиреБрднрд╡ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ (рдЬреИрд╕реЗ рд╡реАрдЯреВрд░ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ tsserver-ish, рд╕рд╛рде рд╣реА рд╕рд╛рде html/css/рдЖрджрд┐ LSPs) рдЪрд▓рд╛рддрд╛ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдмрд╛рд╣рд░ рдХреА рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡) рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TSServer рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ .vue рдлрд╛рдЗрд▓реЗрдВ рдЧреИрд░-рдЯреАрдПрд╕ рдХреЛрдб рдХреЛ рдорд╛рд╕реНрдХ рдХрд░рдХреЗ рд╡реИрдз рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВред

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреИрдЪ рдкреАрдЖрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
https://github.com/znck/vue-developer-experience/pull/7

рддреЛ ... @orta рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреБрдХрд╕рд╛рди рдЕрдм рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ? рдпрд╛ рдпрд╣ рдЕрднреА рднреА рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╣реИ, рд╕рд┐рд░реНрдл рдПрдХ рдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХреБрдЫ package.json рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ?

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

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

рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдПрдХ рдЦрд░рд╛рдм рдХреЛрд░ рдЯреАрдо рд╕рджрд╕реНрдп рдмрдиреВрдВрдЧрд╛;)

svelte2ts рдЖрдЬрд╝рдорд╛рдирд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд▓рдЧрддрд╛ рд╣реИ!

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдирд╛рдо рдХреЛрдб рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ svelte2tsx рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рд╣реЛрдЧрд╛: https://marketplace.visualstudio.com/items?itemName=halfnelson.svelte-type-checker-vscode рдПрдХ рд╕рд╛рде Svelte рдмреАрдЯрд╛ (рдпрджрд┐ рдЖрдк svelte рдмреАрдЯрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд▓реНрдк рддрд╛рдХрд┐ рдЖрдкрдХреЛ рджреЛрдЧреБрдиреЗ рд╕рдВрдХреЗрдд рди рдорд┐рд▓реЗ :))

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ svelte2tsx рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЪрд░реНрдЪрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЦреБрд╢ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП svelte рдХреЗ JS рдХреЛрдб рдореЗрдВ рдХреМрди рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред svelte2tsx рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рди рдХреЗрд╡рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рднреА рд╣реИ, рдЬреЛ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/halfnelson /svelte2tsx/рдкреЗрдбрд╝/рдорд╛рд╕реНрдЯрд░/рдкрд░реАрдХреНрд╖рдг/svelte2tsx/рдирдореВрдиреЗ

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

рдмрд╕ рдЗрд╕ рд░реЗрдкреЛ https://github.com/pivaszbs/svelte-autoimport рдХреА рдЦреЛрдЬ рдХреАред рд╢рд╛рдпрдж рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо svelte2tsx рд╕реНрд╡рддрдВрддреНрд░ рдЖрдпрд╛рдд рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

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

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

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

JAD3N picture JAD3N  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

canadaduane picture canadaduane  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

non25 picture non25  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ