λ²κ·Έ μ€λͺ
$: ({ 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 μ€λ₯κ° λ°μνμ§ μμμΌ ν©λλ€.
μ€ν¬λ¦°μ·
ν΄λΉνλ κ²½μ° λ¬Έμ λ₯Ό μ€λͺ
νλ λ° λμμ΄ λλ μ€ν¬λ¦°μ·μ μΆκ°νμΈμ.
μμ€ν (λ€μ μ 보λ₯Ό μμ±νμμμ€):
ν΄κ²° λ°©λ²
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μ λ§λ€ κ²μ λλ€.