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

TypeScript:如何为泛型函数定义字符串类型的参数名?

问题背景

已知可以在对象类型中使用泛型字符串作为键名,示例如下:

type A<B extends string> = { [C in B]?: string }

const c: A<"a" | "b"> = {
    "a": "example",
}

现在希望在函数参数中实现类似效果,但尝试的代码无法运行:

type A<B extends string> = ([C in B]?: string) => string

const c: A<"a" | "b"> = (a: string) => string

可行解决方案

你写的代码存在语法错误,因为映射类型([C in B])不能直接用在函数参数的位置上。要实现和对象类型一致的泛型键名效果,需要把函数参数定义为映射生成的对象类型,具体写法如下:

方案1:参数为泛型键组成的可选对象(与原对象逻辑完全对应)

// 泛型函数类型:参数是包含B中字符串作为可选键的对象
type A<B extends string> = (params: { [C in B]?: string }) => string

// 使用示例
const c: A<"a" | "b"> = (params) => {
  // 可安全访问params.a或params.b
  return params?.a ?? params?.b ?? "默认返回值";
}

方案2:参数为单个可选的泛型字符串(若需求是单个参数场景)

如果你的实际需求是让函数接受单个可选的、类型为B的字符串参数,写法更简洁:

type A<B extends string> = (param?: B) => string

const c: A<"a" | "b"> = (param) => {
  return param ?? "默认值";
}

内容的提问来源于stack exchange,提问作者Julian A Avar C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:16:56