Kri*_*don 9 typescript svelte svelte-3
我在项目中使用插槽道具。我有一个以数组作为输入的通用组件。
我的组件:
<script lang="ts">
export let data: Array<any>;
</script>
<div>
<!-- some stuff ... -->
{#each data as item}
<slot {item} />
{/each}
<!-- ... and other stuff ... -->
</div>
Run Code Online (Sandbox Code Playgroud)
呼叫者:
<script lang="ts">
let myData : Array<MyType> = ...
</script>
<MyComponent data={myData} let:item>
<li>{item.myVerySpecificField}
</MyComponent>
Run Code Online (Sandbox Code Playgroud)
我不知道如何强制将项目键入为 MyType。有任何想法吗?
它按原样工作,但我在编译时没有得到任何检查。
据我所知,通用组件是通过实验实现的,如下所述:https: //github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-事件.md
在你的情况下,这将转化为:
我的组件:
<script lang="ts">
// define a generic
type T = $$Generic;
// use that generic
export let data: Array<T>;
</script>
<div>
<!-- some stuff ... -->
{#each data as item}
<slot {item} />
{/each}
<!-- ... and other stuff ... -->
</div>
Run Code Online (Sandbox Code Playgroud)
呼叫者:
<script lang="ts">
import MyComponent from "./MyComponent.svelte";
type MyType = { field: "one" | "two" | "three" };
let myData: Array<MyType> = [
{ field: "one" },
{ field: "two" },
{ field: "three" },
];
</script>
<MyComponent data={myData} let:item>
<li>{item.field}</li>
</MyComponent>
Run Code Online (Sandbox Code Playgroud)
item然后应该正确输入。
| 归档时间: |
|
| 查看次数: |
2842 次 |
| 最近记录: |