繁体   English   中英

如何根据 Typescript 的输入参数定义一个 function 的返回类型?

[英]How to define the return type of a function according to the input parameters with Typescript?

我有一个 function 和一个 object 作为参数:

// Types
type Params = {
  first: string;
  second: number;
  third?: boolean;
};
type FunctionA = (params: Params) => { [key: string]: any } | void;

// Function
const functionA: FunctionA = params => {
  // ... do something
  if (params.third) {
    return {one: "object"}
  }
};

所以基本上,我想要实现的是,如果已经提交了third ,我希望 function 返回类型是{[key: string]: any} 如果third没有提交,我希望它是never

我找到了解决方案,其中 function 的返回类型根据已返回的参数而变化,但如果 object 是一个参数并且返回类型与参数类型不同。

这甚至可能吗?

谢谢! 任何帮助表示赞赏!

您可以使用function 过载

LE:更好地阅读问题后,我认为这就是您想要的:

type Params = {
  first: string;
  second: number;
  third?: boolean;
};

function A(params: Omit<Params, "third">): void
function A(params: Required<Params>): { [key: string]: any }
function A(params: Params): { [key: string]: any } | void {
  if (params.third === undefined) {
    return
  }

  return {...params}
}

同样,您正在重载 function,但这次您在参数中声明一个没有third ,而另一个是所有字段都需要的地方,包括third

你可以在这个操场上看到这一点。

您可以使用 2 和 3 个参数声明 2 个函数,然后实现它。 与此类似的东西:

function A (first: string, second: string, third: boolean): {[key: string]: any}
function A (first: string, second: string): never
function A (first: string, second: string, third?: boolean) {
  if (third === undefined) {
    throw new Error("error message")
  }

  return {first, second, third}
}

现在您的 IDE 或任何代码助手应该知道,如果您传递 2 个参数,则您有一个返回类型,如果您传递 3 个另一个参数。

注意:当不传递第三个参数时,我没有看到never返回的正当理由。 几乎就像你想让第三个强制性而不是可选的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM