Language-tools: рднреНрд░рд╛рдордХ / рдЧрд▓рдд рдХреЛрдб рдкреВрд░рд╛ рд╣реЛрдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЬреБрд▓ре░ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sveltejs/language-tools

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

рдкреНрд░рдЬрдирди рдХрд░рдирд╛
Parent.svelte рдФрд░ Child.svelte рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд╕реЗрдЯрдЕрдк рджреЗрдЦреЗрдВ:

// Parent.svelte
<script>
    import {onMount} from "svelte"
    import Child from "./Child.svelte"

    let child

    onMount(()=> {

    })

</script>

<Child bind:this={child} />`
// Child.svelte
<script>
    export let foo
    export let bar = undefined

    export const baz = () => {
        console.log("executed function 'baz'!")
    }    
</script>

<div>
    foo is: <em>{foo}</em><br/>
    bar is: <em>{bar}</em>
</div>

<script></script> рд╕рд╛рде JS :

vscode_confusing_code_completition

  • рдмрд╛рд▓ рдШрдЯрдХ рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб bar , baz , foo , ref рдЖрджрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
    рдЕрдкреЗрдХреНрд╖рд┐рдд: рдХреЗрд╡рд▓ foo рдФрд░ bar

    • ref рд╡рд╣рд╛рдВ рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
    • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ $ $ prop_def, $$ рд╕реНрд▓реЙрдЯ_def, __sveltets_ensureType, __sveltets_partial svelte2tsx (?) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ
    • рдмрдЪреНрдЪрд╛ / рдмрдЪреНрдЪрд╛?
    • рдСрдирдорд╛рдЙрдВрдЯ
  • bar , baz , foo рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ? :)
    рдЕрдкреЗрдХреНрд╖рд┐рдд: bar рд╡реИрдХрд▓реНрдкрд┐рдХ, baz рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ, foo рдЕрдирд┐рд╡рд╛рд░реНрдп (рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреЗрдВ)ред

  • child рдкрд░
    foo рд╕реВрдЪреАрдмрджреНрдз рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИ (рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВ), baz рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИред
    рдЕрдкреЗрдХреНрд╖рд┐рдд: foo рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, baz рд╕реВрдЪреАрдмрджреНрдз рд╣реИ

  • рд╣рд╛рд▓рд╛рдВрдХрд┐ baz рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рджреЗрдЦреЗрдВ)

<script lang="typescript"></script> рд╕рд╛рде рдЯреАрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг:

// Parent.svelte
<script lang="typescript">
    import {onMount} from "svelte"
    import Child from "./Child.svelte"

    let child:Child

    onMount(()=> {

    })

</script>

<Child bind:this={child} />`
// Child.svelte
<script lang="typescript">
    export let foo: number
    export let bar: number = undefined

    export const baz = (): void => {
        console.log("executed function 'baz'!")
    }    
</script>

<div>
    foo is: <em>{foo}</em><br/>
    bar is: <em>{bar}</em>
</div>

vscode_confusing_code_completition_ts

  • рдмрд╛рд▓ рдШрдЯрдХ рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб bar , baz , foo , ref рдЖрджрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
    рдЕрдкреЗрдХреНрд╖рд┐рдд: рдХреЗрд╡рд▓ foo рдФрд░ bar + рдЖрджрд┐ред

  • bar , baz , foo рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ? :)
    рдЕрдкреЗрдХреНрд╖рд┐рдд: bar рд╡реИрдХрд▓реНрдкрд┐рдХ, baz рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ, foo рдЕрдирд┐рд╡рд╛рд░реНрдп (рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреЗрдВ)ред

  • child -рд╕рдорд╛рди рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХреЗрд╡рд▓ $$prop_def рдФрд░ $$slot_def рджрд┐рдЦрд╛рддрд╛ рд╣реИ

    • $$prop_def рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж bar , baz , foo (рдХреЗрд╡рд▓ baz рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ)
    • foo рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ "Cannot read ..." -рд░реЛрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "Props cannot be read directly from the component ..." рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ
    • $$prop_def.baz() рдХреЙрд▓ рдХрд░рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓-рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВ)
    • рдХреЙрд▓рд┐рдВрдЧ child.baz() рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдХрдВрд╕реЛрд▓ рджреЗрдЦреЗрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реАрдПрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)

рдирд┐рд╖реНрдХрд░реНрд╖:

рдХреЛрдб рдкреВрд░рд╛ рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рднреНрд░рд╛рдордХ / рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ? ! рдпрджрд┐ рдРрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдХреЗрдд рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ!

рд╕рд┐рд╕реНрдЯрдо (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рдХрд░реЗрдВ):

  • рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 10
  • IDE: VSCode 1.47.2
  • рдкреНрд▓рдЧрдЗрди / рдкреИрдХреЗрдЬ: 101.2.0 VSCode рдХреЗ рд▓рд┐рдП Svelte

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреИрдХреЗрдЬ

"rollup": "^2.21.0",
"rollup-plugin-svelte": "^5.2.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-typescript": "^5.0.2",
"svelte": "^3.24.0",
"svelte-preprocess": "^4.0.8",
"tslib": "^2.0.0",
"typescript": "^3.9.7"

tsconfig.json

"compilerOptions": {
        "target": "es2017",
        "strict": false, 
        "moduleResolution": "node",
        "allowJs": false,
        "lib": [
            "es2017", "DOM"
        ],
        "types": [
            "svelte"
        ],
        "baseUrl": "."
    },
    "include": [
        "./src"
      ]
}

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

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

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

  • рдмрд╛рд▓ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЗрд╡рд▓ $ $ рд╣реИ ..: # 307 рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░рдг, рдЕрднреА рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • $$ ..- рдкреВрд░реНрдгрддрд╛: рд╣рд╛рдБ, рдЖрдВрддрд░рд┐рдХ svelte2tsx, рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
  • foo рд╡реИрдХрд▓реНрдкрд┐рдХ: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд рдореЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

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

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

  • рдмрд╛рд▓ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЗрд╡рд▓ $ $ рд╣реИ ..: # 307 рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░рдг, рдЕрднреА рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • $$ ..- рдкреВрд░реНрдгрддрд╛: рд╣рд╛рдБ, рдЖрдВрддрд░рд┐рдХ svelte2tsx, рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
  • foo рд╡реИрдХрд▓реНрдкрд┐рдХ: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд рдореЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЖрд╣, рдареАрдХ рд╣реИ, рдЖрдк рддреЗрдЬреА рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

  • foo рд╡реИрдХрд▓реНрдкрд┐рдХ: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд рдореЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕ рдПрдЯреАрдПрдо рдкрд░ рдЕрдкрдиреА рд░рд╛рдп рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдкрд╣рд▓реЗ рдЬрд╛рдБрдЪ / рдпрд╛рдж рдХрд░ рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред ЁЯдФ

рд╢реАрдШреНрд░ рдирд╡реАрдиреАрдХрд░рдг:

  • рд╕рдВрджрд░реНрдн рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЕрдм рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред $$slot_def рдЖрджрд┐ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • ref рдЕрдм рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

Kingwl picture Kingwl  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

opensas picture opensas  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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