Language-tools: ν˜Όλž€ μŠ€λŸ½κ±°λ‚˜ 잘λͺ»λœ μ½”λ“œ μ™„μ„±

에 λ§Œλ“  2020λ…„ 07μ›” 17일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: sveltejs/language-tools

버그 μ„€λͺ…
일반 JS와 TS λͺ¨λ‘μ™€ ν˜Όλ™λ˜λŠ” μ½”λ“œ 완성을 κ²½ν—˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ λ­”κ°€ 잘λͺ» μ„€μ •ν–ˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž¬ν˜„ν•˜λ €λ©΄
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, $$ slot_def, __sveltets_ensureType, __sveltets_partial은 svelte2tsx (?)
    • 아이 / 아이?
    • onMount?
  • bar , baz , foo λŠ” λͺ¨λ‘ 선택 사항 (? :)으둜 λ‚˜μ—΄λ©λ‹ˆλ‹€.
    μ˜ˆμƒ : bar 선택적, baz λ‚˜μ—΄λ˜μ§€ μ•ŠμŒ, foo ν•„μˆ˜ (μ½˜μ†” κ²½κ³  μ°Έμ‘°).

  • child -reference에 λŒ€ν•œ μ½”λ“œ 완성도 svelte2tsx κ΄€λ ¨ ν•­λͺ© 외에도 ν˜Όλž€ μŠ€λŸ½μŠ΅λ‹ˆλ‹€.
    foo 이 λ‚˜μ—΄λ˜μ–΄ μžˆμ§€λ§Œ μ•‘μ„ΈμŠ€ ν•  μˆ˜λŠ” μ—†μ§€λ§Œ (μ½˜μ†” 였λ₯˜ μ°Έμ‘°) baz 은 (λŠ”) λ‚˜μ—΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    μ˜ˆμƒ 됨 : foo 이 (κ°€) λ‚˜μ—΄λ˜μ§€ μ•ŠμŒ, baz κ°€ (κ°€) λ‚˜μ—΄ 됨

  • baz κ°€ λͺ©λ‘μ— μ—†μ§€λ§Œ 호좜 ν•  수 있으며 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€ (μ½˜μ†” 둜그 μ°Έμ‘°).

<script lang="typescript"></script> TS 버전 :

// 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() ν˜ΈμΆœμ€ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ (console.log μ°Έμ‘°) λ‚˜μ—΄λ˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ VS μ½”λ“œμ—μ„œ 였λ₯˜λ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€ : "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)

κ²°λ‘ :

μ½”λ“œ 완성은 μ‹€μ œλ‘œ λ„ˆλ¬΄ ν˜Όλž€ μŠ€λŸ½κ±°λ‚˜ 잘λͺ»λ˜μ–΄μ„œ λ‚΄κ°€ 잘λͺ» κ΅¬μ„±ν–ˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? πŸ€” κ·Έλ ‡κ²Œ κ°€μ •ν•œλ‹€λ©΄ μ–΄λ–€ νžŒνŠΈλΌλ„ λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€!

μ‹œμŠ€ν…œ (λ‹€μŒ 정보λ₯Ό μž‘μ„±ν•˜μ‹­μ‹œμ˜€) :

  • 운영체제 : Windows 10
  • IDE : VSCode 1.47.2
  • ν”ŒλŸ¬κ·ΈμΈ / νŒ¨ν‚€μ§€ : Svelte for VSCode 101.2.0

κ΄€λ ¨ package.json

"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κ³Ό λ™μΌν•œ 원인, μ—¬μ „νžˆ κ΅¬ν˜„ν•΄μ•Όν•©λ‹ˆλ‹€.
  • $$ ..- completions : 예, λ‚΄λΆ€ svelte2tsx, 필터링해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • foo 선택 사항 : 엄격 λͺ¨λ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— λͺ¨λ“  μ†Œν’ˆμ΄ 선택 μ‚¬ν•­μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 이 결정을 λ‹€μ‹œ κ²€ν† ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

당신은 잘λͺ» μ„€μ •ν•˜μ§€ μ•Šμ•˜κ³ , 당신은 ν•œ λ²ˆμ— λ§Žμ€ 단점을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€ πŸ˜ƒ

  • ν•˜μœ„ μ°Έμ‘°μ—λŠ” $$ .. 만 μžˆμŠ΅λ‹ˆλ‹€. # 307κ³Ό λ™μΌν•œ 원인, μ—¬μ „νžˆ κ΅¬ν˜„ν•΄μ•Όν•©λ‹ˆλ‹€.
  • $$ ..- completions : 예, λ‚΄λΆ€ svelte2tsx, 필터링해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • foo 선택 사항 : 엄격 λͺ¨λ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— λͺ¨λ“  μ†Œν’ˆμ΄ 선택 μ‚¬ν•­μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 이 결정을 λ‹€μ‹œ κ²€ν† ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ•„, μ’‹μ•„μš”, λΉ λ₯Έ λ‹΅μž₯ κ°μ‚¬ν•©λ‹ˆλ‹€!

  • foo 선택 사항 : 엄격 λͺ¨λ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— λͺ¨λ“  μ†Œν’ˆμ΄ 선택 μ‚¬ν•­μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 이 결정을 λ‹€μ‹œ κ²€ν† ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ’‹μ•„,이 ATM에 λŒ€ν•œ λ‚΄ μ˜κ²¬μ„ 곡유 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ¨Όμ € 확인 / κΈ°μ–΅ν•˜μ§€ μ•Šμ€ 이유λ₯Ό κΈ°μ–΅ν•΄μ•Όν•©λ‹ˆλ‹€. πŸ€”

λΉ λ₯Έ μ—…λ°μ΄νŠΈ:

  • 참쑰에 λŒ€ν•œ μ½”λ“œ 완성이 이제 μž‘λ™ν•©λ‹ˆλ‹€. $$slot_def 등은 이것이 νƒ€μž… 검사에 κ΄€ν•œ 것이며 이것을 μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλœλ‹€λŠ” 주석을 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • ref 더 이상 ν‘œμ‹œλ˜μ§€ μ•ŠμŒ
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰