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
相关产品推荐
相关产品推荐

