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

Typescript如何无参数合并仅字符串不同的相似按钮点击函数?

TypeScript合并相似点击函数的实现方案

你提到的高阶函数思路完全可行,仅需修正少量语法问题、补充TS类型约束即可达到需求,最终生成的onClickLoginA、onClickLoginB均为无参函数,绑定到按钮时不需要传递任何参数。

完整实现代码

// 限定合法的登录渠道取值,避免传入非法值
type LoginTarget = 'A' | 'B'

/**
 * 生成登录点击处理函数
 * @param target 登录渠道标识
 */
function createLoginHandler(target: LoginTarget): () => void {
  return () => {
    // 注意TS模板字符串插值需要加$符号
    const loginURL = `http://.../.../${target}`
    window.open(loginURL, `Login with ${target}`)
  }
}

// 生成两个无参点击函数,直接绑定到按钮的点击事件即可
const onClickLoginA = createLoginHandler('A')
const onClickLoginB = createLoginHandler('B')

补充说明

  • 该方案的维护成本极低,后续需要新增C、D等其他登录渠道时,仅需新增一行生成代码即可,不需要重复编写逻辑
  • 如果你希望更贴近C++模板的静态泛型写法,也可以用TS泛型实现,运行时效果和上述代码完全一致:
type LoginTarget = 'A' | 'B'

function createLoginHandler<T extends LoginTarget>(target: T): () => void {
  return () => {
    const loginURL = `http://.../.../${target}`
    window.open(loginURL, `Login with ${target}`)
  }
}

const onClickLoginA = createLoginHandler<'A'>('A')
const onClickLoginB = createLoginHandler<'B'>('B')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:57:02