我想创建一个接受2个参数的函数。
TParam
)或 void
TParam
)或没有该属性的对象(TParam
),如果第1个参数类型是- TParam
.最终,我想 TParam
可以在任何参数中传递类型,但不能传递两次
这是我最好的 "非 "工作解决方案。
type TParam = {
a: string;
b: string;
}
const param: TParam = { a: "string", b: "string" };
type Check<T> = T extends TParam ? void : TParam
const example = <T extends TParam>(arg0?: T) => (arg1: Check<T>) => {
if (typeof arg0 === 'object') {
return arg0;
}
return arg1;
}
const ok = example()(param) // Wrong
const ok1 = example(param)() // Ok
const error = example({})() // Ok
你可以用以下方法实现 功能重载. 以下是一个工作实例。 你也可以在这里尝试一下 游乐场环节.
type TParam = {
a: string;
b: string;
}
const param: TParam = { a: "string", b: "string" };
function example(x: TParam): () => TParam;
function example(): (x: TParam) => TParam;
function example(x?: TParam) {
if(x) {
return () => x
}
else {
return (x: TParam) => x
}
}
const ok = example()(param) // No error
const ok1 = example(param)() // No error
const error = example({})() // Error, which is expected