具有泛型的 Svelte 组件

Kev*_*ers 9 typescript typescript-generics svelte svelte-3 sveltekit

我想在 Svelte(Kit) 组件的 props 中使用泛型类型,我发现有这样的type T = $$Generic东西:

<script lang="ts">
  import type { Writable } from "svelte/store";
  type T = $$Generic;
  export let store: Writable<T[]>;
</script>
Run Code Online (Sandbox Code Playgroud)

虽然这很棒,但我确实需要比这更多的信息:我要求 具有T属性id。通常我会做这样的事情:

export type WithId = { id: number };
function foo<T extends WithId>(property: T) { ... }
Run Code Online (Sandbox Code Playgroud)

我怎样才能对 Svelte 组件道具做类似的事情?

H.B*_*.B. 23

编辑:设计已更改,泛型现在应定义为使用常规extends关键字的属性:

<script lang="ts" generics="T extends { id: number }">
Run Code Online (Sandbox Code Playgroud)

RFC


您可以像这样指定它扩展的类型:

type T = $$Generic<{ id: number }>;
Run Code Online (Sandbox Code Playgroud)

您还可以使用typeinterface名称,但如果您在组件中定义它们,则可能必须将它们放置在模块脚本中,即如下所示:

<script lang="ts" context="module">
    interface WithId { id: number }
</script>
<script lang="ts">
    export let store: Writable<T[]>;

    type T = $$Generic<WithId>;
</script>
Run Code Online (Sandbox Code Playgroud)