Language-tools: ์ž๋™ ์™„์„ฑ ๋ฉ”๋‰ด์—์„œ ๋‚ด๋ณด๋‚ธ ๊ธฐ๋Šฅ ํ‘œ์‹œ

์— ๋งŒ๋“  2020๋…„ 07์›” 15์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sveltejs/language-tools

๊ธฐ๋Šฅ ์š”์ฒญ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
๊ตฌ์„ฑ ์š”์†Œ ์ธ์Šคํ„ด์Šค์— ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ๋‚ด๋ณด๋‚ธ ๊ธฐ๋Šฅ์„ ์ž๋™ ์™„์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ์†”๋ฃจ์…˜ ์„ค๋ช…
๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

<!-- 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 ๊ธฐ๋Šฅ์ด ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
image

์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ
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>
Fixed enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ƒˆ๋กœ์šด VSCode ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์ด ๋ฐฉ๊ธˆ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ IDE๊ฐ€ ์•„์ง ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์€ 101.4.0์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‹ค์Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์ง€๋งŒ ๋‚ด ์ทจํ–ฅ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

<!-- 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

์žฌํ˜„ ๋‹จ๊ณ„:

  • ์ƒˆ๋กœ์šด typescript svelte ์•ฑ ์„ค์ •:
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_'

๋‚˜๋Š” ์ด๊ฒƒ์„ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰