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

Foundry中TypeScript函数如何用rest parameters实现多入参

问题原因

Foundry 平台的 Ontology 函数注册机制本身不支持可变数量的独立入参,这是平台静态类型扫描的固有逻辑,和TypeScript语法本身无关。
平台在扫描@Function()装饰器标记的函数时,会逐一定义固定参数位映射到Ontology的可配置入参项,TypeScript的rest参数(...names: string[])属于语法糖,会被直接识别为单个Array<string>类型的固定入参,不会展开为多个独立的可传值参数位,不存在通过修改TS写法让平台自动识别N个独立字符串入参的可能。

可行实现方案

根据使用场景选对应方案即可:

方案1:面向Workshop/Vertex等可视化搭建场景(最常用)

现有函数逻辑完全可用,只需要去掉rest语法的三个点,保留数组入参,搭配前端动态组件实现任意个字符串输入的效果:

@Function()
public stringAppendFunction(delimiter: string, names: string[]): string {
    return names.join(delimiter)
}

在可视化 builder 中配置函数入参时,给names参数绑定字符串类型动态列表变量:

  • 可以给终端用户提供「新增输入项」按钮,点击后自动生成新的字符串输入框
  • 所有输入框的内容会自动汇总为数组传入函数
  • 终端用户使用时完全感知不到底层是数组传参,和传入N个独立参数的交互效果一致

方案2:面向代码侧调用场景

如果需要在其他函数、本地TS代码中实现传入任意个独立字符串的调用体验,新增一层不带@Function()装饰器的包装方法即可,不会被平台注册为额外函数:

// 平台注册的底层函数,固定两个入参
@Function()
public stringAppendFunction(delimiter: string, names: string[]): string {
    return names.join(delimiter)
}

// 本地调用用的包装方法,支持rest参数传值
export const appendStrings = (delimiter: string, ...names: string[]): string => {
    return stringAppendFunction(delimiter, names)
}

代码侧调用时可以直接按多参数写法传值,不需要手动构造数组:

// 调用示例
const result = appendStrings("-", "foo", "bar", "baz") // 返回值为 "foo-bar-baz"
注意事项

不要尝试通过定义固定数量的重载参数(比如写10个可选字符串参数)来模拟可变入参,这种方式维护成本极高,且在动态列表组件的支持下完全没有必要,数组传参是平台官方推荐的处理任意数量同类型入参的标准方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:31