Language-tools: $store 값을 νŒŒκ΄΄ν•  λ•Œ 예기치 μ•Šμ€ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

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

버그 μ„€λͺ…
$: ({ value } = $store); 문은 value κ°€ $store 의 속성이고 $store κ°€ Svelte μ €μž₯μ†ŒμΈ 경우 μœ νš¨ν•œ κ΅¬λ¬Έμž…λ‹ˆλ‹€. 일반적인 ꡬ쑰 λΆ„ν•΄μ²˜λŸΌ μž‘λ™ν•˜κ³  μ—…λ°μ΄νŠΈλ₯Ό μ €μž₯ν•˜λŠ” 데 λ°˜μ‘ν•©λ‹ˆλ‹€. lang="ts" λ•Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

# App.svelte
------------
<script lang="ts">
  import data from "./store";
  $: ({ count } = $data);
</script>
jd:/svelte-playground $ yarn svelte-check                                                                                                                                                                                                                      [0:30]
yarn run v1.22.4
warning package.json: No license field
$ /home/jd/Projects/svelte-playground/node_modules/.bin/svelte-check

Loading svelte-check in workspace: /home/jd/Projects/svelte-playground
Getting Svelte diagnostics...
====================================

/home/jd/Projects/svelte-playground/src/App.svelte:3:9
Error: No value exists in scope for the shorthand property 'count'. Either declare one or provide an initializer. (ts)
;
  $: ({ count } = $data

====================================
svelte-check found 1 error and 0 warnings
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

μž¬ν˜„ν•˜κΈ° μœ„ν•΄
1) 이 REPL둜 μ‹œμž‘: 링크
2) λ‹€μš΄λ‘œλ“œν•˜κ³  ν”„λ‘œμ νŠΈμ— TS 지원 μΆ”κ°€: 링크
3) μˆ˜μ • App.svelte μΆ”κ°€ν•˜μ—¬ lang="ts" κ°œκ΅¬λΆ€μ— <script> νƒœκ·Έ. (μœ„μ˜ 슀 λ‹ˆνŽ« μ°Έμ‘°)
4) svelte-check

μ˜ˆμƒλ˜λŠ” 행동
이것은 μœ νš¨ν•œ Svelte/JS ꡬ문이며 그의 μ½”λ“œλŠ” 잘 μ‹€ν–‰λ©λ‹ˆλ‹€. typechecker 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

μŠ€ν¬λ¦°μƒ·
ν•΄λ‹Ήν•˜λŠ” 경우 문제λ₯Ό μ„€λͺ…ν•˜λŠ” 데 도움이 λ˜λŠ” μŠ€ν¬λ¦°μƒ·μ„ μΆ”κ°€ν•˜μ„Έμš”.
image

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

  • 운영 체제: μœˆλ„μš°
  • IDE: VSCode(Windows-Linux ν•˜μœ„ μ‹œμŠ€ν…œ)
  • ν”ŒλŸ¬κ·ΈμΈ/νŒ¨ν‚€μ§€:

    • VSCode용 Svelte

    • λ‚ μ”¬ν•œ 체크

    • @tsconfig/svelte

Fixed bug

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

ν•΄κ²° 방법
Typescript의 Svelte μ €μž₯μ†Œμ—μ„œ ꡬ쑰 λΆ„ν•΄λ₯Ό μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. 이것은 μ΄μƒμ μ΄μ§€λŠ” μ•Šμ§€λ§Œ μ°¨λ‹¨κΈ°λŠ” μ•„λ‹™λ‹ˆλ‹€. ν•œ λ²ˆμ— μ—¬λŸ¬ 속성을 ꡬ쑰화할 λ•Œ 덜 κ°„κ²°ν•©λ‹ˆλ‹€.
REPL: 링크

# App.svelte
------------
<script lang="ts">
  import data from "./store";
  $: count = $data;
</script>

λ¬Όλ‘  λ°˜μ‘ μ—…λ°μ΄νŠΈλ₯Ό 보기 μœ„ν•΄ DOMμ—μ„œ 직접 μŠ€ν† μ–΄ 값을 μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž…λ ₯μ—μ„œ

<script lang="ts">
  import data from "./store";
  $: ({ count } = $data);
</script>

<main>
  <h1>Count (inline): {$data.count}</h1>
  <h1>Count (reactive destructure): {count}</h1>
    <button on:click={() => data.update(c => ({count: c.count + 1}))}>
    Increment
  </button>
</main>

svelte2tsx λŠ” λ‹€μŒκ³Ό 같은 좜λ ₯을 μƒμ„±ν•©λ‹ˆλ‹€.

<></>;
import data from "./store";
function render() {


  ;() => {$: ({ count } = __sveltets_store_get(data));}
;
() => (<>

<main>
  <h1>Count (inline): {__sveltets_store_get(data).count}</h1>
  <h1>Count (reactive destructure): {count}</h1>
    <button onclick={() => data.update(c => ({count: c.count + 1}))}>
    Increment
  </button>
</main> </>);
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class extends createSvelte2TsxComponent(__sveltets_partial(render)) {
}

λ¬Έμ œλŠ” $ -assignmentκ°€ ν•¨μˆ˜λ‘œ λž˜ν•‘λ˜μ–΄ 값이 ν•΄λ‹Ή λ²”μœ„ 밖에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

svelte μ»΄νŒŒμΌλŸ¬κ°€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•˜λŠ” μ‹œκΈ°λ₯Ό κ²°μ •ν•˜λŠ” 방법을 확인해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œλŠ” ts AST λΆ„μ„μž…λ‹ˆλ‹€. 이진 ν‘œν˜„μ‹μΈ κ²½μš°μ—λ§Œ let x = ... λ³€ν™˜μ„ μˆ˜ν–‰ν•˜μ§€λ§Œ 이 κ²½μš°μ—λŠ” κ΄„ν˜Έλ‘œ 묢인 ν‘œν˜„μ‹ μ•ˆμ— λž˜ν•‘λœ 이진 ν‘œν˜„μ‹μž…λ‹ˆλ‹€.

νŽΈμ§‘: μ €λŠ” 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ€‘μž…λ‹ˆλ‹€. 이 λͺ¨λ“  κ²½μš°μ— λŒ€λΉ„ν•˜μ—¬ 이 μ½”λ„ˆ μΌ€μ΄μŠ€λ₯Ό ν™•μΈν•˜λŠ” 것은 제 λ§ˆμŒμ„ 흐리게 λ§Œλ“­λ‹ˆλ‹€ πŸ˜„

예, μ—¬λŸ¬ 가지λ₯Ό λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‚΄ ν˜„μž¬ μƒνƒœλ₯Ό λ³Ό 수 μžˆλ„λ‘ μ΄ˆμ•ˆ PR을 λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰