๊ธฐ๋ฅ ์์ฒญ์ด ๋ฌธ์ ์ ๊ด๋ จ๋์ด ์์ต๋๊น?
๊ตฌ์ฑ ์์ ์ธ์คํด์ค์ ๋ฐ์ธ๋ฉํ ๋ ๋ด๋ณด๋ธ ๊ธฐ๋ฅ์ ์๋ ์์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
์ํ๋ ์๋ฃจ์
์ค๋ช
๋ค์ ๊ตฌ์ฑ ์์๊ฐ ์ ๊ณต๋ฉ๋๋ค.
<!-- App.svelte -->
<script>
import ClickTracker from "./ClickTracker.svelte";
let componentRef;
</script>
<main>
<ClickTracker bind:this={componentRef} />
<button on:click={componentRef.track}>Click me</button>
</main>
<!-- ClickTracker.svelte -->
<script>
export function track() {
clicks++;
}
let clicks = 0;
</script>
<p>Clicks: {clicks}</p>
componentRef
์์ ์์
ํ ๋ ์๋ ์์ฑ ๋ฉ๋ด์ track
๊ธฐ๋ฅ์ด ํ์๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
์ถ๊ฐ ์ปจํ
์คํธ
svelte-preprocess์ ํจ๊ป TypeScript๋ฅผ ์ฌ์ฉํ ๋ ์ถ์ ๊ธฐ๋ฅ์ ์ฐธ์กฐํ๋ฉด componentRef.track
์ฐธ์กฐ ์๋์ "'ClickTracker__SvelteComponent_'.ts(2339) ์ ํ์ 'ํธ๋' ์์ฑ์ด ์กด์ฌํ์ง ์์ต๋๋ค"๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ด๋ จ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
<!-- App.svelte -->
<script lang="ts">
import ClickTracker from "./ClickTracker.svelte";
let componentRef: ClickTracker;
</script>
<main>
<ClickTracker bind:this={componentRef} />
<button on:click={componentRef.track}>Click me</button>
</main>
๋น์ทํ ๋ฌธ์ ๊ฐ ์์๊ณ ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ง๋ง ๋ด ์ทจํฅ์๋ ๋๋ฌด ๋ง์ ์ฝ๋์ ๋๋ค.
<!-- ClickTracker.svelte -->
<script context='module' lang='ts'>
export type ClickTrackerType = SvelteComponent & { track(): void }
</script>
[...]
๊ทธ๋ฐ ๋ค์ App.svelte
:
<!-- App.svelte -->
<script lang='ts'>
import ClickTracker from "./ClickTracker.svelte";
import type { ClickTrackerType } from "./ClickTracker.svelte";
let componentRef: ClickTrackerType;
</script>
๋ฐ๋ฉด์ vscode์์ ๊ฒ์ฌํ ๊ฒฐ๊ณผ
์, ์ข์ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค. ํ์คํ ์ด์์ ์ธ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ฝ๋์ด์ง๋ง. ๋ํ track()
ํจ์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ด๋ณด๋ธ ์ ํ๋ ์๋์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํ๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค.
@geoffrich ๋ฌผ๋ก ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋๊น์ง์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ ๋ฟ์ ๋๋ค. typescript๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ svelte๊ฐ ๋ด Svelte ๊ตฌ์ฑ ์์์ ๋ํ ์ ๋ ฅ์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋์๊ฒ ์ด์์ ์ธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
let componentRef: ClickTracker
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ๋ค์ผ...
ํด๊ฒฐ๋์๋์? Typescript๋ก ClickTracker ์์ ๋ฅผ ์๋ํ๋ฉด ์ฌ์ ํ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Property 'track' does not exist on type 'ClickTracker__SvelteComponent_'.ts(2339)
์ ๋ ์ต๊ทผ์ setupeNode.js ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ sveltejs/template์์ ๋ง๋ ์์ ์ ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ๋ค์ ๋ด devDependencies์ ๋๋ค.
"devDependencies": {
"@rollup/plugin-commonjs": "^12.0.0",
"@rollup/plugin-node-resolve": "^8.0.0",
"rollup": "^2.3.4",
"rollup-plugin-livereload": "^1.0.0",
"rollup-plugin-svelte": "^5.0.3",
"rollup-plugin-terser": "^5.1.2",
"svelte": "^3.0.0",
"svelte-check": "^0.1.0",
"svelte-preprocess": "^4.0.0",
"@rollup/plugin-typescript": "^4.0.0",
"typescript": "^3.9.3",
"tslib": "^2.0.0",
"@tsconfig/svelte": "^1.0.0"
},
์๋ก์ด VSCode ํ๋ฌ๊ทธ์ธ ๋ฒ์ ์ด ๋ฐฉ๊ธ ์ถ์๋์์ผ๋ฉฐ IDE๊ฐ ์์ง ์ ๋ฐ์ดํธ๋์ง ์์์ ์ ์์ต๋๋ค. ์ต์ ๋ฒ์ ์ 101.4.0์ ๋๋ค.
ํ๋ฅญํ!!!
@opensas @dummdidumm ์ด ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค.
Svelte ํ๋ฌ๊ทธ์ธ: 104.9.1
์ฌํ ๋จ๊ณ:
npx degit sveltejs/template svelte-app
cd svelte-app
node ./scripts/setupTypeScript.js
src/ClickTracker.svelte
์ ๋ง๋ญ๋๋ค.<script>
export function track() {
clicks++;
}
let clicks = 0;
</script>
<p>Clicks: {clicks}</p>
src/App.svelte
๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.<script lang="ts">
import ClickTracker from "./ClickTracker.svelte";
let componentRef: ClickTracker;
</script>
<main>
<ClickTracker bind:this={componentRef} />
<button on:click={componentRef.track}>Click me</button>
</main>
src/App.svelte
์ ์ค๋ฅ๋ฅผ ํ์ธํ์ญ์์ค. Property 'track' does not exist on type 'ClickTracker__SvelteComponent_'
๋๋ ์ด๊ฒ์ ์ฌํ ํ ์ ์์ผ๋ฉฐ ๋๋ฅผ ์ํด ์ผํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ก์ด VSCode ํ๋ฌ๊ทธ์ธ ๋ฒ์ ์ด ๋ฐฉ๊ธ ์ถ์๋์์ผ๋ฉฐ IDE๊ฐ ์์ง ์ ๋ฐ์ดํธ๋์ง ์์์ ์ ์์ต๋๋ค. ์ต์ ๋ฒ์ ์ 101.4.0์ ๋๋ค.