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

问题描述 投票:0回答:2

让我解释:

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

可以在TypeScript中定义这个“绑定”吗?

typescript types parameters type-inference
2个回答
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
投票

您可以使用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']) { ... }
© www.soinside.com 2019 - 2024. All rights reserved.