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

TypeScript多管道函数数组的泛型类型校验实现咨询

实现多组管道函数的TypeScript类型校验

核心类型定义

复用你已有的单组管道校验泛型Chain,再扩展出多组管道的约束类型:

// 校验单组管道的链式类型兼容性
type Chain<T extends any[]> = T extends [infer FirstFn, ...infer RestFns]
  ? FirstFn extends (...args: any[]) => infer Output
    ? RestFns extends ((input: Output) => any)[]
      ? [FirstFn, ...RestFns]
      : never
    : never
  : [];

// 约束多组管道的配置结构:每个属性对应一组合规的管道
type MultiPipelineConfig = {
  [key: string]: Chain<any[]>;
};

use函数实现

通过泛型约束,让use函数自动校验传入的多组管道:

function use<Pipelines extends MultiPipelineConfig>(pipelines: Pipelines) {
  // 这里可添加管道执行、存储等业务逻辑
  return pipelines;
}

示例演示

正确用法

每组管道内的函数输入输出完全匹配,TypeScript不会报错:

use({
  before: [
    (num: number) => num.toString(),
    (str: string) => str.length,
    (len: number) => len > 5
  ],
  after: [
    (isValid: boolean) => isValid ? "passed" : "failed",
    (status: string) => ({ code: 200, status })
  ]
});

错误用法

after管道中第二个函数的输入类型与前一个的输出不匹配,TypeScript会直接检测到错误:

use({
  before: [
    (num: number) => num.toString(),
    (str: string) => str.length
  ],
  after: [
    (isValid: boolean) => isValid ? 1 : 0,
    (status: string) => ({ status }) // ❌ TypeScript报错:类型“number”的参数不能赋给类型“string”的参数
  ]
});

类型校验说明

  • Chain泛型会递归校验单组管道内的每个函数:确保前一个函数的输出类型,能完全匹配后一个函数的输入类型。
  • MultiPipelineConfig将单组校验逻辑扩展到对象的所有属性,实现多组管道的批量校验。
  • use函数通过泛型约束Pipelines extends MultiPipelineConfig,强制要求传入的所有管道组都符合链式类型兼容规则,不符合的代码会在编译阶段被TypeScript拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:54:43