如何“绑定” TypeScript中的参数,使一个类型“依赖”另一种类型?

时间:2018-09-02 21:20:29

标签: typescript types parameters type-inference

让我解释一下:

  • arg1必须是Type1Type2
  • arg2必须是Type1.options(如果arg1Type1)或Type2.options
create(arg1: Type1 | Type2, arg2?: any) {}

是否可以在TypeScript中定义此“绑定”?

2 个答案:

答案 0 :(得分:2)

您正在寻找overloaded function

function create(arg1: Type1, arg2?: Type1.options);
function create(arg1: Type2, arg2?: Type2.options);
function create(arg1: Type1 | Type2, arg2?: Type1.options | Type2.options) { ... }

请注意,最后一个签名(“实现签名”)不是重载签名之一,并且应该足够宽以涵盖所有重载签名。您将在函数主体中整理出实际参数。

答案 1 :(得分:1)

您可以使用generic声明来推断这种依赖性:

function create<T extends (Type1 | Type2)> (arg1: T, arg2?: T['options']) { ... }

您还可以创建别名type ArgType = Type1 | Type2来简化通用约束:

function create<T extends ArgType> (arg1: T, arg2?: T['options']) { ... }