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

TypeScript中如何将函数作为Props传递?代码场景答疑

TypeScript组件间函数属性传递问题解答

问题1:子组件的函数参数类型定义

你需要把##something goes here##替换为对应的函数类型,有两种常用方式:

方式1:直接内联定义函数类型

export function childFunction(
    emailDetails: EmailVerification[],
    emailDeleteHandler: (emailAddress: string) => void
) {
    // 组件逻辑
}

方式2:抽离类型别名(推荐复用场景)

如果这个删除函数的类型会在多个组件里用到,抽成类型别名更便于维护:

// 定义可复用的类型
type EmailDeleteHandler = (emailAddress: string) => void;

export function childFunction(
    emailDetails: EmailVerification[],
    emailDeleteHandler: EmailDeleteHandler
) {
    // 组件逻辑
}

两种写法都完全符合TypeScript语法规范,按需选择即可。

问题2:父组件传递函数的正确姿势

你当前的写法childFunction(emailDetails || [], emailDeleteHandler)本身是对的,但有两个优化点:

  1. 直接传递函数引用:别额外套一层函数(比如() => emailDeleteHandler(...)),除非你需要提前绑定固定参数,否则直接传原函数就行。
  2. 改用React组件props模式(推荐):如果这是React组件,更符合社区惯例的写法是让子组件接收props对象,而非直接传多个参数:

子组件调整为props模式:

// 定义props接口
export interface ChildProps {
    emailDetails: EmailVerification[];
    onDelete: (emailAddress: string) => void;
}

export function childFunction({ emailDetails, onDelete }: ChildProps) {
    const emailToBeDeleted = 'emailToBeDeleted';
    return (
        <div>
            <button onClick={() => onDelete(emailToBeDeleted)}>
                Delete from account
            </button>
        </div>
    )
}

父组件用JSX调用:

return (
    <div>
        <childFunction 
            emailDetails={emailDetails || []} 
            onDelete={emailDeleteHandler} 
        />
    </div>
)

这种模式更清晰,也方便后续扩展更多props。如果坚持用你原来的函数直接调用方式,当前代码没问题,不用改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:03:24