λ€μκ³Ό κ°μ΄ μ μ λ μμ μ΄μλ κ²½μ° :
import { readable, Readable } from "svelte/store"
const post: Readable<Post|null> = readable(null, /* some code that loads the post asynchronously */)
κ·Έλ° λ€μ ν νλ¦Ώμ λ€μμ μμ±ν©λλ€.
<h1>{$post.title}</h1>
κ·Έλ° λ€μ typescript κ²μ¬κΈ°λ Object is possibly 'null'
μ¬λ°λ₯΄κ² λΆνν©λλ€. κ·Έλ° λ€μ μ΄λ κ²νλ©΄ μ€λ₯κ° μ¬λΌμ§ μ μκΈ°λ₯Ό λ°λμ΅λλ€.
{#if $post !== null}
<h1>{$post.title}</h1>
{/if}
κ·Έλ¬λ κ·Έκ²μ μ ν ν¨κ³Όκ° μμ΅λλ€. μ΄λ€ μ’ λ₯κ° λ§μ΄λλμ§. λλ typescriptκ° κ·Έκ²μ΄ if- λ¬Έμ΄λΌλ κ²μ μ΄ν΄νμ§ λͺ»ν μλ μμμ μ΄ν΄ν©λλ€.
μ΄κ²μ΄ μ€μ λ‘ κ΅¬ννλ κ²μ΄ μ¬μνμ§ μμ κ²μ΄λΌκ³ μμν μ μμ§λ§, μ λ§ μ’μ κ² κ°μ΅λλ€.
λ¬Έμ λ
{#if $post !== null}
<h1>{$post.title}</h1>
{/if}
(μ°λ¦¬κ° svelte2tsx
λ₯Ό ν΅ν΄ λͺ¨λ μ§λ₯μ μΈ μ₯μ μ μν΄)
if (__sveltets_store_get(post) !== null){<>
<h1>{__sveltets_store_get(post).title}</h1>
</>}
보μλ€μνΌ μμ μ‘μΈμ€λ __sveltets_store_get
ν¨μλ‘ λ³νλλ―λ‘ TSμ μ μ΄ νλ¦μ μ΄κ²μ΄ μ μλμ§ μμ / λμ΄ μλμ§ κ²°μ ν μ μμ΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ 첫 λ²μ§Έ __sveltets_store_get
κ° λ³μμ ν λΉ λ λ€μ if λ²μ λ΄μμ μ¬μ©λλ λ°©μμΌλ‘μ΄λ₯Ό λ³νν΄μΌν©λλ€.
μ’μμ,μ΄κ² κ°λ₯ν κΉμ? π
λλ κ·Έλ κ² μκ°ν΄
νμ€ Sapper ν νλ¦Ώμ Typescript μ§μμ μΆκ°νλ €κ³ ν λ λμΌν λ¬Έμ κ° λ°μνλ€κ³ λ§νλ μ£Όμμ λλ€.
Discord #sapper μ±λμ λν λ΄ κ²μλ¬Ό μμ :
μ§λ¬Έμ΄ μμ΅λλ€.
Svelte Typescript μ§μμ {#each cat as cats}
μ κ°μ HTML λΈλ‘μΌλ‘ νμ₯λ©λκΉ?
μ€ν¬λ¦° μ·μ νμ€ Sapper ν νλ¦Ώμ λν΄ Typescriptλ₯Ό μΌ ν svelte-checkμμ κ°μ Έμ¨ κ²μ λλ€.
λ€μμ src/routes/blog/index.svelte
μ κ΄λ ¨ μ½λ μ€ λν«μ
λλ€.
<ul>
{#each posts as post}
<!-- we're using the non-standard `rel=prefetch` attribute to
tell Sapper to load the data for the page as soon as
the user hovers over the link or taps it, instead of
waiting for the 'click' event -->
<li><a rel='prefetch' href='blog/{post.slug}'>{post.title}</a></li>
{/each}
</ul>
κ·Έλ¦¬κ³ svelte-checkμ κ΄λ ¨ μ€λ₯ ( tsconfig.json
strict: false
μμλ) :
/Users/paul/dev/solidrevolution_svelte-sapper/src/routes/blog/index.svelte:32:42
Error: Property 'slug' does not exist on type 'unknown'. (ts)
waiting for the 'click' event -->
<li><a rel='prefetch' href='blog/{post.slug}'>{post.title}</a></li>
{/each}
/Users/paul/dev/solidrevolution_svelte-sapper/src/routes/blog/index.svelte:32:55
Error: Property 'title' does not exist on type 'unknown'. (ts)
waiting for the 'click' event -->
<li><a rel='prefetch' href='blog/{post.slug}'>{post.title}</a></li>
{/each}
posts
μ νμ λͺ¨λ₯΄λ κ²½μ° λ¬Έμ κ° λ¬΄μμΈμ§ μ μ μμ΅λλ€. κ·Έλ¬λ κ²μλ¬Όμ μ μ μλλ‘ μ€ν¬λ¦½νΈ νκ·Έμ posts
λ³μμ λν΄ μ ν μ΄μ€ μ
μ μνν΄μΌ ν μ μμ΅λλ€.
κ° λΈλ‘μ λͺ©λ‘μ΄ ArrayLike μΈν°νμ΄μ€λ₯Ό ꡬννλ ν κ·Έλ‘λΆν° μμ μ νμ μΆλ‘ ν μ μμ΄μΌν©λλ€.
κ·Έ λμ λ‘컬 λ³μμ μ¬ ν λΉνλ κ²μ΄ ν΄κ²° λ°©λ²μ΄ λ μ μμ΅λλ€.
$: storeValue = $store
μμ κ°μ λ³μλ‘ μΆμΆνμ¬μ΄λ₯Ό ꡬνν λ μΌλμ λμ΄μΌ ν μ¬ν :
λμΌν λ¬Έμ κ° λ°μνμ§λ§ 맀μ₯μ΄ μμ΅λλ€.
κ°λ¨ν ν μ€νΈ μΌμ΄μ€ :
<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}
{#if test.author}
μ€μ "Object is possible null"μ€λ₯κ° νμλ©λλ€.
λμΌν λ¬Έμ μ λκΉ μλλ©΄ λ€λ₯Έ λ²κ·Έμ λκΉ?
μ격 λͺ¨λμμλμ΄ μ¬λ°λ₯Έ λμ, λΉμ μ μ
λ ₯μ
λλ€ test
κ°λ₯νκ²λλ λ±μ null
μ€λ₯κ° μ¬ μ μλλ‘. test
κ° λ¨Όμ μ μλμλμ§ νμΈν΄μΌν©λλ€.
μ격 λͺ¨λμμ μ΄κ²μ μ¬λ°λ₯Έ λμμ μ¬μ©μκ° μ λ ₯μ λλ€
test
κ°μ κ°λ₯μ± μμnull
μ€λ₯κ° μ¬ μ μλλ‘.test
κ° λ¨Όμ μ μλμλμ§ νμΈν΄μΌν©λλ€.
κ·Έ μ μ {#if test}
μνκ° μμ΅λλ€.
μ£μ‘ν©λλ€. λ무 빨리 λλ΅νμ΅λλ€. μ, μ΄κ²μ λ€λ₯Έ λ¬Έμ μ λλ€. λ€λ₯Έ ν°μΌμ μ΄ μ μμ΅λκΉ?
λ¬Όλ‘ μ΄μΌ. μ΄κΈ° μ μ μ€λ³΅μ΄ μλμ§ νμΈνκ³ μΆμμ΅λλ€. :)
μλ νμΈμ μ¬λ¬λΆ! μ΄κ²μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
μ΄ λ¬Έμ λ VS Code Svelte νμ₯ λ²μ 104.4.4 λ° svelte-check
λ²μ 1.1.36μΌλ‘ μμ λμ΄μΌν©λλ€. svelte-check
κ²½μ° TypeScript 4.2 μ΄μλ νμν©λλ€.
μ§κΈ μμλλ‘ μλνλμ§ μλ €μ£ΌμΈμ. 맀μ₯ μ¬μ©κ³Ό κ΄λ ¨μ΄μλ μ μ΄ νλ¦ λ¬Έμ κ° μ¬μ ν μ‘΄μ¬νλ©° # 619μμ μΆμ λ©λλ€.
μ΄ λ¬Έμ λ VS Code Svelte νμ₯ λ²μ 104.4.4 λ°
svelte-check
λ²μ 1.1.36μΌλ‘ μμ λμ΄μΌν©λλ€.svelte-check
κ²½μ° TypeScript 4.2 μ΄μλ νμν©λλ€.μ§κΈ μμλλ‘ μλνλμ§ μλ €μ£ΌμΈμ. 맀μ₯ μ¬μ©κ³Ό κ΄λ ¨μ΄μλ μ μ΄ νλ¦ λ¬Έμ κ° μ¬μ ν μ‘΄μ¬νλ©° # 619μμ μΆμ λ©λλ€.
κ·Έκ²μ λλ₯Ό μν΄ μΌνκ³ μμ΅λλ€! μ¬ μ§μ ν΄νΉμ μ κ±° ν μ μμ΅λλ€. κ°μ¬ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
κ·Έ λμ λ‘컬 λ³μμ μ¬ ν λΉνλ κ²μ΄ ν΄κ²° λ°©λ²μ΄ λ μ μμ΅λλ€.