You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向泛型Svelte组件传递TypeScript类型变量?

在Svelte组件中传递泛型类型T(无需seed属性)

你可以通过Svelte的$$Generic语法结合类型断言,或者在Svelte 5中直接使用泛型标签来实现,完全不需要额外的seed属性。

方法1:Svelte 4及稳定版

组件实现(MyComponent.svelte)

<script lang="ts">
  import type { Record } from 'pocketbase';

  // 定义泛型T,继承自PocketBase的Record基类
  type T = $$Generic<Record>;

  export let id: string;

  // 调用泛型数据获取函数,返回T类型数据
  const data: T = fetchData<T>(id);

  // 声明插槽的类型,将泛型T传递给外部使用
  interface $$Slots {
    default: { record: T };
  }
</script>

<slot record={data} />

使用组件时指定泛型

在使用组件的地方,通过类型断言将组件绑定到你需要的具体类型,不用传任何额外props:

<script lang="ts">
  import type { Record } from 'pocketbase';
  import MyComponent from './MyComponent.svelte';

  // 定义你的自定义Record类型
  interface SomeRecord extends Record {
    name: string;
    age: number;
  }

  // 生成针对SomeRecord类型的组件版本
  const TypedMyComponent = MyComponent as typeof MyComponent & {
    $$prop_def: { id: string };
    $$slot_def: { default: { record: SomeRecord } };
  };
</script>

<TypedMyComponent id="123abc" let:record>
  <!-- 这里record会自动推断为SomeRecord,支持类型提示 -->
  <p>记录ID: {record.id}</p>
  <p>姓名: {record.name}</p>
  <p>年龄: {record.age}</p>
</TypedMyComponent>

方法2:Svelte 5(Beta版,更简洁)

Svelte 5原生支持在组件标签上直接指定泛型参数,写法和常规TypeScript完全一致:

组件实现(MyComponent.svelte)

<script lang="ts">
  import type { Record } from 'pocketbase';

  type T = $$Generic<Record>;

  let id: string;

  const data: T = fetchData<T>(id);
</script>

<slot record={data} />

使用组件

<script lang="ts">
  import type { Record } from 'pocketbase';
  import MyComponent from './MyComponent.svelte';

  interface SomeRecord extends Record {
    name: string;
  }
</script>

<!-- 直接在标签上指定泛型类型 -->
<MyComponent<SomeRecord> id="123abc" let:record>
  <p>姓名: {record.name}</p>
</MyComponent<SomeRecord>>

临时简化方案(单次使用)

如果只是单次使用组件,也可以直接在插槽变量上做类型断言,虽然不够优雅但能快速解决问题:

<MyComponent id="123abc" let:record={record as SomeRecord}>
  <p>姓名: {record.name}</p>
</MyComponent>

内容的提问来源于stack exchange,提问作者NachoMuncher22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:55:33