Language-tools: 각 블둝 타이핑 문제

에 λ§Œλ“  2021λ…„ 01μ›” 03일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: sveltejs/language-tools

{#each ...}λ₯Ό μ‚¬μš©ν•˜μ—¬ 속성 값을 λ°˜λ³΅ν•˜λ €κ³ ν•˜λŠ”λ° Svelte ꡬ성 μš”μ†Œμ— 두 가지 μž…λ ₯ (TypeScript ν”„λ‘œμ νŠΈ)이 μžˆμŠ΅λ‹ˆλ‹€.

<script lang="ts">
    import Transition from './Transition/Transition.svelte';

    type Options = { text: string, value?: string }[];
    type OptionsGroup = Options[];

    export let options: Options | OptionsGroup = [];
</script>

{#each options as option}
    <div>example</div>
{/each}

각 λͺ…λ Ήλ¬Έμ˜ μ˜΅μ…˜ μœ ν˜•μ΄ Options | OptionsGroup 이 될 κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜μ§€λ§Œ VS CodeλŠ” λ‹€μŒκ³Ό 같은 였λ₯˜λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

'μ˜΅μ…˜ | OptionsGroup '은'ArrayLike <{ν…μŠ€νŠΈ : λ¬Έμžμ—΄ μœ ν˜•μ˜ 맀개 λ³€μˆ˜μ— ν• λ‹Ή ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ°’? : λ¬Έμžμ—΄; }> '.

λΉŒλ“œ 및 개발 μž‘μ—…μ΄ 였λ₯˜μ—†μ΄ 잘 μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— μ •ν™•νžˆ 무엇이 잘λͺ»λ˜κ³  μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. VS Code의 문제 μΌλΏμž…λ‹ˆλ‹€.

체계:

  • 운영체제 : Manjaro (Linux)
  • IDE : VSCode
  • ν”ŒλŸ¬κ·ΈμΈ / νŒ¨ν‚€μ§€ : Svelte for VSCode
bug question

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

λ˜ν•œ {#each} μ—μ„œ μ΄μƒν•œ 버그λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

κ°€λŠ₯ν•œ κ°€μž₯ μž‘μ€ μž¬ν˜„ :

<script lang="ts">
  let data: { name: string } | null = null,
    someArr = [1, 2, 3];
</script>

{#if data}
  <!-- Works fine -->
  {data.name}
  {#each someArr as _}
    <!-- Highlights an error! -->
    {data.name}
  {/each}
{/if}

Mac, VS Code, μ΅œμ‹  ν”ŒλŸ¬κ·ΈμΈ μ‹€ν–‰. λ‚˜λŠ” 그것이이 λ¬Έμ œμ™€ λ‹€μ†Œ 관련이 μžˆλ‹€κ³  μ§κ°ν•œλ‹€.

Proof of bug

@dkzlv κ·Έκ±° # 619

λ‚˜λŠ” 이것이 우리 μΈ‘μ—μ„œ κ³ μΉ  수 μ—†λ‹€κ³  λ‘λ €μ›Œν•˜λ©° TypeScript 문제 인 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

function each<T>(
    array: ArrayLike<T>, // or T[], doesnt matter for the error
    callbackfn: (value: T, index: number) => any
): any{ /* doesnt matter */ };

each(options, a => a); // The same TS error

each ν•¨μˆ˜λŠ” 기본적으둜 each -블둝을 μœ ν˜• κ²€μ‚¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. ν˜•μ‹ μ•ˆμ „μ„±μ„ μžƒμ§€ μ•Šκ³  였λ₯˜λ₯Ό μΉ¨λ¬΅μ‹œν‚¬ 방법을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  이것을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 전에이 typescript 였λ₯˜κ°€ μžˆλ‹€κ³  μƒκ°ν•˜κ³  μž„μ˜μ˜ 쑰합을 μ‹œλ„ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€.

<script lang="ts">
  type Option = { text: string, value?: string };
  type OptionsGroup = Option[];

  export let options: Array<Option | OptionsGroup> = [];
</script>

{#each options as option}
  <div>example</div>
{/each}

νŽΈμ§‘ν•˜λ‹€:
이 두 μœ ν˜•μ€ λ™μΌν•˜μ§€ μ•Šμ§€λ§Œ λŒ€λΆ€λΆ„μ˜ 경우 차이점에 λŒ€ν•΄ μ‹ κ²½ 쓰지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. 관심이 μžˆλ‹€λ©΄ μΊμŠ€νŒ…ν•˜κΈ° μœ„ν•΄ μ»€μŠ€ν…€ νƒ€μž… κ°€λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

μ„€λͺ…을 ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μΆ”μ²œλŒ€λ‘œ 타이핑을 μˆ˜μ •ν–ˆμœΌλ©° 거의 β€‹β€‹ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

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