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

如何在Svelte中为组件传递带泛型的Props?

解决Svelte自定义Form组件泛型onSubmit的类型错误问题

要让自定义Form组件的onSubmit支持泛型适配不同场景,需在组件中正确声明泛型参数并完善类型定义,以下是具体解决步骤:

  • 正确声明组件泛型
    在Svelte组件的<script>标签上添加generics="T"明确泛型参数,同时为T设置默认类型(如unknown),避免未指定泛型时的类型报错。

  • 完善onSubmit的类型约束
    将onSubmit的类型指定为SubmitFunction<T>,确保TypeScript能识别泛型参数T。

修改后的组件代码如下:

<script lang="ts" generics="T = unknown">
    import { enhance } from '$app/forms';
    import type { SubmitFunction } from '@sveltejs/kit';

    export let action: string;
    export let onSubmit: SubmitFunction<T>;
</script>

<form method="POST" {action} use:enhance={onSubmit}>
  <slot />
</form>
  • 使用组件时指定泛型(可选)
    在父组件中使用自定义Form时,可根据业务场景指定T的具体类型,比如表单提交的数据结构:
<script lang="ts">
    import CustomForm from './CustomForm.svelte';
    import type { SubmitFunction } from '@sveltejs/kit';

    type LoginFormData = {
        username: string;
        password: string;
    };

    const handleLoginSubmit: SubmitFunction<LoginFormData> = async ({ data }) => {
        // data会被自动推断为LoginFormData类型
        console.log('提交的用户名:', data.username);
    };
</script>

<CustomForm action="/api/login" onSubmit={handleLoginSubmit} />

若仍出现Cannot find name 'T'错误,检查以下两点:

  • 确认Svelte版本在3.46.0及以上(该版本开始支持组件泛型)
  • 检查tsconfig.json的compilerOptions,确保开启strict模式且lib包含ESNext等必要配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:03