如何在typecript中根据其他参数类型设置第1个参数类型的可选性。

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

我想创建一个接受2个参数的函数。

  • 第一个参数 - 可以是具有特定属性的对象 (TParam)或 void
  • 第2个参数 - 应该是具有特定属性的对象(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
typescript optional-parameters optional-arguments
1个回答
0
投票

你可以用以下方法实现 功能重载. 以下是一个工作实例。 你也可以在这里尝试一下 游乐场环节.

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
© www.soinside.com 2019 - 2024. All rights reserved.