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

TypeScript严格模式下泛型与默认类型的适配问题

TypeScript严格模式下泛型Block类型适配问题

我正在重构代码以支持TypeScript严格模式,遇到了泛型函数相关的问题。核心是一个接收包含blocks属性对象的函数,该属性使用带默认类型的泛型类型。

类型定义

Context类型

export type Context<
  S extends VariableSchema = VariableSchema,
  R extends VariableSchema = VariableSchema,
> = {
  blocks: { [key: string]: Block };
  schema: S;
  result: R;
};

Block类型

export type Block<
  ParamMap extends BlockParamSchema = BlockParamSchema,
  HandleMap extends { [key: string]: string } = { [key: string]: string },
> = {
  label: string;
  parameters: ParamMap;
  validateParameters: (args: {
    parameters: ConvertVariableSchemaToObjectType<ParamMap>;
    getVariableDefinition: (name: string) => Variable;
  }) => z.AnyZodObject;
  handles: HandleMap;
  execute: (args: BlockExecutionApi<ParamMap, HandleMap>) => Promisable<void>;
};

使用方式

创建Context

export const deductionCalculationContext = createContext({
  blocks: defaultBlocks,
  schema: {
    deductionYtd: v.number('Deduction YTD'),
    eligibleWages: v.number('Eligible Wages'),
  },
  result: {
    employeeAmount: v.number('Employee Amount'),
    companyAmount: v.number('Company Amount'),
  },
});

创建Block实例

所有Block都通过createBlock函数声明,以保证类型安全:

export const conditionBlock = createBlock({
  label: 'If',

  parameters: {
    when: {
      label: 'Condition',
      type: 'unknown',
      required: true,
    },
    equalTo: {
      label: 'Equal to',
      type: 'unknown',
      required: true,
    },
  },

  handles: {
    true: 'True',
    false: 'False',
  },

  execute: async ({ parameters, fireHandle }) => {
    parameters.when === parameters.equalTo ? fireHandle('true') : fireHandle('false');
  },
});

问题现象

尽管类型本质一致(仅缺少泛型参数),TypeScript仍无法编译,错误出现在第173行。

已尝试方案

  • 省略blocks并重新声明为非泛型类型可运行,但存在类型安全隐患;
  • 关闭strictFunctionTypes可运行,但会破坏其他函数类型安全特性;
  • 将blocks属性设为泛型;
  • 将blocks属性设为无约束泛型,通过映射类型、条件类型和推断获取泛型值,概念可行但因递归引用无法应用。

需求

希望避免显式传递泛型类型,已知已有库实现该功能,寻求解决方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:20:02