Language-tools: TypeScriptλŠ” λ³€μˆ˜λ₯Ό κ²€μ‚¬ν•˜λŠ” 쑰건 λ‚΄μ—μ„œ λ³€μˆ˜λ₯Ό null κ°€λŠ₯μ„±μ΄μžˆλŠ” κ²ƒμœΌλ‘œ 잘λͺ» κ°„μ£Όν•©λ‹ˆλ‹€.

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

버그 μ„€λͺ…
쀑첩 된 쑰건뢀 검사에 λŒ€ν•΄ TypeScript 였λ₯˜ "κ°œμ²΄κ°€ null 일 수 있음"이 ν‘œμ‹œλ©λ‹ˆλ‹€.

μž¬ν˜„ν•˜λ €λ©΄
κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ :

<script lang="typescript">
    interface TestObject {
        author?: string;
    }
    export let test: TestObject | null;
</script>

{#if test}
    <div>
        {#if test.author}
            <div>Author: {test.author}</div>
        {/if}
    </div>
{/if}

타이프 μ—λŸ¬λ₯Ό λ°œμƒ Object is possibly null 라인 {#if test.author} μ•„λ‹Œ ꡬ체적에 test κ·Έ μ•ˆμ— 라인.

μ˜ˆμƒλ˜λŠ” 행동
였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€.

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

  • 운영체제 : OSX 10.15.7
  • IDE : VSCode
  • ν”ŒλŸ¬κ·ΈμΈ / νŒ¨ν‚€μ§€ : "Svelte for VSCode"

μΆ”κ°€ μ»¨ν…μŠ€νŠΈ
쀑첩 된 쑰건문이 제거되고 TestObject μΈν„°νŽ˜μ΄μŠ€μ—μ„œ author? κ°€ author (ν•„μš”ν•œ 경우)둜 λ°”λ€Œλ©΄ TypeScriptκ°€ {test.author} λŒ€ν•΄ λ™μΌν•œ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” 것이 λ…Όλ¦¬μ μž…λ‹ˆλ‹€. ,ν•˜μ§€λ§Œ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ TypeScriptκ°€ test κ°€ null이 μ•„λ‹˜μ„ μ•Œμ§€ λͺ»ν•˜λ©΄ 쀑첩 된 쑰건문에 μ˜ν•΄ 였λ₯˜κ°€ 트리거 된 κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

Fixed bug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ†Œκ·œλͺ¨ μ—…λ°μ΄νŠΈ / μš”μ•½ :

  • μ œμ–΄ 흐름은 μ½”λ“œκ°€ #await , #each , let:X ꡬ문 쀑 ν•˜λ‚˜μ— ν¬ν•¨λ˜λŠ” μ¦‰μ‹œ μž¬μ„€μ •λ©λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œλ₯Ό λ³€ν™˜ν•΄μ•Όν•˜λŠ” 방식 λ•Œλ¬Έμž…λ‹ˆλ‹€. μš°λ¦¬λŠ”μ΄ 문제λ₯Ό μžŠμ§€ μ•Šμ•˜μœΌλ©° μ—¬μ „νžˆμ΄ 문제λ₯Ό 쒋은 λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•  방법을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.
  • 쀑첩 된 if 쑰건은 이제 첫 번째 κΈ€ 머리 κΈ°ν˜Έμ— μ–ΈκΈ‰ 된 사항 쀑 ν•˜λ‚˜μ— μ˜ν•΄ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ” ν•œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

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

μš°λ¦¬κ°€ 그것을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 무엇을 ν•  수 μžˆλŠ”μ§€ λͺ¨λ¦…λ‹ˆλ‹€. svelte2tsxλŠ” λ‹€μŒκ³Ό 같이 λ³€ν™˜ν•©λ‹ˆλ‹€.

() => (<>

{() => {if (test){<>
    <div>
        {() => {if (test.author){<>
            <div>Author: {test.author}</div>
        </>}}}
    </div>
</>}}}</>);

μ œμ–΄ 흐름 μœ ν˜• 뢄석이 μ μš©λ˜μ§€ μ•Šλ„λ‘ ν•¨μˆ˜μ— λž˜ν•‘λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 그리고 μš°λ¦¬λŠ” ν•¨μˆ˜λ₯Ό μ œκ±°ν•˜κ±°λ‚˜ μ¦‰μ‹œ 호좜 된 ν•¨μˆ˜λ‘œ λž˜ν•‘ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 쒅속성이 μ œν•œ 될 λ•Œ ν‘œν˜„μ‹μ΄ λ‹€μ‹œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” ν™•μ‹€νžˆ 일뢀 μ œμ–΄ 흐름 μœ ν˜•μ„ λ¬΄νš¨ν™”ν•΄μ•Όν•©λ‹ˆλ‹€.

이것을 μ‚Όμ›μœΌλ‘œ λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆκΉŒ? else 블둝이 μ—†μœΌλ©΄ else μΌ€μ΄μŠ€μ— 빈 λ¬Έμžμ—΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ 더 큰 λ¬Έμ œλŠ” μš°λ¦¬κ°€ μ–΄λ–€ λ³€ν™˜μ—μ„œλ„ 이와 같은 κΈ°λŠ₯을 μ‚¬μš©ν•  수 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ–΄μ©Œλ©΄ ν—ˆμš©! 톡사둠? {#if test!.author} 이것은 μœ νš¨ν•œ TypeScript κ΅¬λ¬Έμ΄μ§€λ§Œ μ§€κΈˆμ€ ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ€ 마크 μ—…μ—μ„œ typescriptλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 마크 업을 μ „μ²˜λ¦¬ν•˜κ±°λ‚˜ μ»΄νŒŒμΌλŸ¬κ°€ typescript ꡬ문을 ꡬ문 λΆ„μ„ν•˜λ„λ‘ν•˜λŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 널이 μ•„λ‹Œ μ£Όμž₯은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
생쑴 κ°€λŠ₯μ„± ꡬ맀λ₯Ό μ‹œλ„ν•˜μ§€ μ•Šμ•˜ 으면 μƒμœ„ μˆ˜μ€€ 쑰건을 λ³΅μ‚¬ν•˜μ—¬ 쀑첩 쑰건 μ•žμ— μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 {() => {if (test && test.author){<>
            <div>Author: {test.author}</div>
        </>}}}

μž„μ‹œ ν•΄κ²° 방법 :

<script lang="typescript">
    interface TestObject {
        author?: string;
    }
    export let test: TestObject | null;

    let requitedTest: Required<TestObject>;
    $: {
        requiredTest = test as unknown as Required<TestObject>;
    }
</script>

{#if test}
    <div>
        {#if requiredTest.author}
            <div>Author: {requiredTest.author}</div>
        {/if}
    </div>
{/if}

λ³€μˆ˜ 볡사, λ‹€λ₯Έ μœ ν˜• ν• λ‹Ή 및 쀑첩 μ‘°κ±΄μ—μ„œ μ‚¬μš©. μΆ”μ•…ν•˜κ³  μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©ν•΄μ•Όν•˜μ§€λ§Œ κ²½κ³ λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.

μ§€κΈˆλ³΄λ‹€ μ‹€μš©μ μΈ ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

{#if test}
    <div>
        {#if test?.author}
            <div>Author: {test.author}</div>
        {/if}
    </div>
{/if}

특히 λ™μΌν•œ 객체 λ‚΄λΆ€λ₯Ό λ“œλ¦΄λ§ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ³„λ„μ˜ 쑰건을 λ§Œλ“€ λ•Œ 맀우 μ„±κ°€μ‹  μΌμž…λ‹ˆλ‹€.

{#if bigSwitch}
    <div>
        {#if smallSwitch}
            <MyComponent {bigSwitch} />
        {/if}
    </div>
{/if}

μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. TypeScriptλŠ” ν…œν”Œλ¦Ώμ—μ„œ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μΌν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 그러면 test && test.author .

선택적 체이닝을 μ˜λ―Έν•˜λŠ” 경우 μ΄λŠ” 단지 typescript κΈ°λŠ₯이 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ μžλ°” 슀크립트 κΈ°λŠ₯μž…λ‹ˆλ‹€. 3.24.0 이후 svelteμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

감사! λ‚˜λŠ” 항상 그것이 null이 μ•„λ‹Œ λ¬Έ foo! κ³Ό μœ μ‚¬ν•œ TS κΈ°λŠ₯이라고 κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€. 그것은 훨씬 더 κ°„λ‹¨ν•©λ‹ˆλ‹€.

항상 μƒˆλ‘œμš΄ 것을 λ°°μš°μ‹­μ‹œμ˜€ :)

생쑴 κ°€λŠ₯μ„± ꡬ맀λ₯Ό μ‹œλ„ν•˜μ§€ μ•Šμ•˜ 으면 μƒμœ„ μˆ˜μ€€ 쑰건을 λ³΅μ‚¬ν•˜μ—¬ 쀑첩 쑰건 μ•žμ— μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 {() => {if (test && test.author){<>
          <div>Author: {test.author}</div>
      </>}}}

λ‚˜λŠ” κ·Έ λ°©ν–₯으둜 λͺ‡ 가지 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν–ˆμœΌλ©° 이것이 λͺ¨λ“  κ²½μš°μ— μž‘λ™ν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. #if λŒ€ν•œ 였λ₯˜λ₯Ό 차단할 수 μžˆμ§€λ§Œ κ·Έ μ•ˆμ— #each λ˜λŠ” #await 블둝을 μ‚¬μš©ν•˜λŠ” μ¦‰μ‹œ λ‹€μ‹œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 였λ₯˜λŠ” λ³€μˆ˜κ°€ const 인 경우 λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. TS μ œμ–΄ 흐름은 λ³€μˆ˜λ₯Ό λ‹€μ‹œ ν• λ‹Ή ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 쑰건이 μ—¬μ „νžˆ μ°Έμ΄μ–΄μ•Όν•œλ‹€λŠ” 것을 μ•Œκ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. λ”°λΌμ„œμ΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λͺ¨λ“  λ³€μˆ˜λ₯Ό const λ³€μˆ˜λ‘œ λ³€ν™˜ν•˜κ±°λ‚˜ λͺ¨λ“  λ³€μˆ˜λ₯Ό ν…œν”Œλ¦Ώμ˜ μž„μ‹œ λ‹€λ₯Έ λ³€μˆ˜μ— λ‹€μ‹œ ν• λ‹Ήν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜Έλ²„ 정보, 이름 λ°”κΎΈκΈ°, μ„ μ–ΈμœΌλ‘œ 이동 λ“±μ˜ 경우 자체 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. μ•„λ§ˆλ„ μ‰Όν‘œ 식을 μ‚¬μš©ν•˜μ—¬ {#if foo} λ₯Ό {#if (foo, generatedConstFoo)} λ³€ν™˜ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ²°λ‘  : 이것은 κ½€ λ§Žμ€ 해컀 리λ₯Ό ν•„μš”λ‘œ ν•  κ²ƒμž…λ‹ˆλ‹€.

κ²°κ΅­ "μƒμœ„ μˆ˜μ€€μ˜ if 블둝 μΆ”κ°€"κ°€ μ˜¬λ°”λ₯Έ 것일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 각 / λŒ€κΈ° 블둝 λ‚΄μ—μ„œ 쑰건이 μ—¬μ „νžˆ 참이라고 κ°€μ •ν•˜λŠ” 것은 μ•ˆμ „ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λŸ°νƒ€μž„ 였λ₯˜ ( toUpperCase is not a function )κ°€ λ°œμƒν•©λ‹ˆλ‹€.

<script>
    let name = 'name';
    function setNameToNumber(){
        name = 1
        return ['a']
    }
</script>

{#if name}
    <h1>Hello {name.toUpperCase()}!</h1>
    {#each setNameToNumber() as item}
        item
    {/each}
{/if}

λŒ€κΈ° 블둝에 λŒ€ν•΄μ„œλ„ λ™μΌν•˜κ²Œ ꡬ성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ†Œκ·œλͺ¨ μ—…λ°μ΄νŠΈ / μš”μ•½ :

  • μ œμ–΄ 흐름은 μ½”λ“œκ°€ #await , #each , let:X ꡬ문 쀑 ν•˜λ‚˜μ— ν¬ν•¨λ˜λŠ” μ¦‰μ‹œ μž¬μ„€μ •λ©λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œλ₯Ό λ³€ν™˜ν•΄μ•Όν•˜λŠ” 방식 λ•Œλ¬Έμž…λ‹ˆλ‹€. μš°λ¦¬λŠ”μ΄ 문제λ₯Ό μžŠμ§€ μ•Šμ•˜μœΌλ©° μ—¬μ „νžˆμ΄ 문제λ₯Ό 쒋은 λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•  방법을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.
  • 쀑첩 된 if 쑰건은 이제 첫 번째 κΈ€ 머리 κΈ°ν˜Έμ— μ–ΈκΈ‰ 된 사항 쀑 ν•˜λ‚˜μ— μ˜ν•΄ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ” ν•œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

μ§€κΈˆμ€ 마크 μ—…μ—μ„œ typescriptλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 마크 업을 μ „μ²˜λ¦¬ν•˜κ±°λ‚˜ μ»΄νŒŒμΌλŸ¬κ°€ typescript ꡬ문을 ꡬ문 λΆ„μ„ν•˜λ„λ‘ν•˜λŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 널이 μ•„λ‹Œ μ£Όμž₯은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
생쑴 κ°€λŠ₯μ„± ꡬ맀λ₯Ό μ‹œλ„ν•˜μ§€ μ•Šμ•˜ 으면 μƒμœ„ μˆ˜μ€€ 쑰건을 λ³΅μ‚¬ν•˜μ—¬ 쀑첩 쑰건 μ•žμ— μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 {() => {if (test && test.author){<>
          <div>Author: {test.author}</div>
      </>}}}

이제 # 493이 $store λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” λ°©μ‹μœΌλ‘œ μˆ˜μ •λ˜μ—ˆμœΌλ―€λ‘œμ΄ 아이디어λ₯Ό λ‹€μ‹œ μ‚΄νŽ΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ 생각은 λ‹€μŒκ³Ό 같은 λͺ¨λ“  if 쑰건을 μ•žμ— μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ (예 : #each ).

에

{#if somecondition && anothercondition}
   {#each ..}
     ..
   {/each}
{/if}

λ°–

<>{__sveltets_each((true, items), (item) => (somecondition && anothercondition) && <>
    ...
</>)}</>

κΉŒλ‹€λ‘œμš΄ 뢀뢄은 elseif / else 및 쀑첩 논리λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ–»λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” VS Code 버전 104.6.3 / svelte-check 버전 1.2.4둜 μˆ˜μ •λ˜μ–΄μ•Όν•©λ‹ˆλ‹€. μ§€κΈˆ μž‘λ™ν•˜λŠ”μ§€ μ•Œλ €μ£Όμ„Έμš”.

문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. 이제 ν…œν”Œλ¦Ώ λ‚΄μ—μ„œ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜μ§€λ§Œ 이벀트 λ¦¬μŠ€λ„ˆμ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ 문제λ₯Ό 열어야할지 λͺ¨λ₯΄κ² μ§€λ§Œ 여기에 μž¬ν˜„μ΄ μžˆμŠ΅λ‹ˆλ‹€.

<script lang="ts">
  let value: string | null = null;

  function acceptsString(value: string) {
    console.log(value);
  }
</script>

{#if value}
  <!-- Argument of type 'string | null' is not assignable to parameter of type 'string'.
  Type 'null' is not assignable to type 'string'. -->
  <button on:click={() => acceptsString(value)} />
{/if}

문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. 이제 ν…œν”Œλ¦Ώ λ‚΄μ—μ„œ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜μ§€λ§Œ 이벀트 λ¦¬μŠ€λ„ˆμ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ 문제λ₯Ό 열어야할지 λͺ¨λ₯΄κ² μ§€λ§Œ 여기에 μž¬ν˜„μ΄ μžˆμŠ΅λ‹ˆλ‹€.

<script lang="ts">
  let value: string | null = null;

  function acceptsString(value: string) {
    console.log(value);
  }
</script>

{#if value}
  <!-- Argument of type 'string | null' is not assignable to parameter of type 'string'.
  Type 'null' is not assignable to type 'string'. -->
  <button on:click={() => acceptsString(value)} />
{/if}

그것은 단지 일반적인 TS ν–‰λ™μž…λ‹ˆλ‹€. 값이 null둜 λŒμ•„κ°ˆ μˆ˜μžˆλŠ” λ―Έλž˜μ— μ–Έμ œλ“ μ§€ 호좜 될 μˆ˜μžˆλŠ” ν•¨μˆ˜μ—μ„œ 값이 μ°Έμ‘°λ©λ‹ˆλ‹€.

λ‘˜ λ‹€ μœ νš¨ν•œλ³΄κΈ°μž…λ‹ˆλ‹€. " value λŠ” constκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— λ³€κ²½ 될 수 μžˆμŠ΅λ‹ˆλ‹€."라고 말할 수 μžˆμ§€λ§Œ λ‹€λ₯Έ ν•œνŽΈμœΌλ‘œλŠ” " value κ°€ null 이면 ν•΄λ‹Ή 클릭 ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€."라고 말할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이에 λŒ€ν•΄ λ‹€λ₯Έ 문제λ₯Ό μ—΄μ–΄μ„œ λ³„λ„λ‘œ λ…Όμ˜ ν•  κ²ƒμž…λ‹ˆλ‹€.

TS 자체의 였래된 선택에 λŒ€ν•΄ λ…Όμ˜ ν•  μ‹œκ°„μ΄ μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ ν•΄λ‹Ή λ˜λŠ” λΆ€λͺ¨ μˆ˜μ€€μ—μ„œ 아웃 μ „ν™˜μ΄μžˆλŠ” 경우 λ²„νŠΌμ΄ value === null둜 κ³ μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

μ—„λ°€νžˆ λ§ν•˜λ©΄ μ œμ–΄ 흐름은 각 루프 λ˜λŠ” λŒ€κΈ° λ‚΄μ—μ„œ λ‹€λ₯Έ λ³€μˆ˜λ₯Ό μˆ˜μ •ν•  수 있기 λ•Œλ¬Έμ— μ΄λŸ¬ν•œ μ™„ν™” λ³€κ²½ 전에 μ •ν™•ν–ˆμŠ΅λ‹ˆλ‹€.

<script lang="ts">
  let foo: string | null = 'bar';
  function getItems() {
     foo = null;
     return [''];
  }
</script>

{#if foo}
  {#each getItems() as item}
    {foo.toUpperCase()} <!-- boom -->
  {/each}
{/if}

.. 근데 λˆ„κ°€ μ΄λŸ¬μ§€? TSμ—μ„œλ„ λ™μΌν•œ λŸ°νƒ€μž„ 였λ₯˜λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. btw. λ”°λΌμ„œ DXμ—μ„œλŠ” "이것은 100 % μ •ν™•ν•©λ‹ˆλ‹€"보닀 νŠΈλ ˆμ΄λ“œ μ˜€ν”„μ— κ°€κΉμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ—¬κΈ°μ—μ„œ 더 μžμ„Ένžˆ λ…Όμ˜ν•˜κΈ° 전에이 λ…Όμ˜λ₯Ό # 876으둜 κ°€μ Έ κ°€μ‹­μ‹œμ˜€ πŸ˜„

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