让我解释一下:
arg1
必须是Type1
或Type2
arg2
必须是Type1.options
(如果arg1
是Type1
)或Type2.options
的create(arg1: Type1 | Type2, arg2?: any) {}
是否可以在TypeScript中定义此“绑定”?
答案 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']) { ... }