TypeScript中的可选对象参数。

6

我正在创建一个带有对象参数的简单函数。它接受openDialog布尔属性,其决定是否运行另一个函数。我没有为它定义接口,因为它永远只会是一个属性。我的问题是如何以这样的方式定义它,以便我不再需要将空对象传递给该函数?openDialog是可选的,那么使对象也是可选的正确语法是什么?

function renderComponent({ openDialog }: { openDialog?: boolean }) {
  render(
    <Component />
  );

  if (openDialog) clickButton('Import Existing');
}

Typescript对renderComponent()进行了投诉,提示:

期望1个参数,但得到0个。

可以使用renderComponent({})

我知道有一个默认参数function renderComponent({ openDialog }: { openDialog?: boolean } = {}) {,但我想知道是否有其他方法。

4个回答

6
也许这就是你想实现的内容。
function renderComponent(openDialog? : { openDialog?: boolean }) {
    render(
        <Component />
    );

    if (openDialog) clickButton('Import Existing');
}

2

这个答案帮助了我解决了问题。此外,即使未提供参数,我也想要一个默认初始化 args = {}。这是我使用的方法:

function renderComponent(args: { openDialog?: boolean } = {}) { 
    const { openDialog } = args;
    // can use openDialog, ofc it will be undefined if not provided by user
    // your code 
}

renderComponent();

1

这个错误:

期望1个参数,但是没有传入。

意味着你必须将一个对象作为参数传递给此函数。

如果你不想使用 openDialog 参数调用此代码,你应该像这样调用此函数:

renderComponent({});

如果您需要可选参数,应按以下方式操作:
function renderComponent(args? : { openDialog?: boolean }) { 
    // your code 
}

renderComponent();

0
在参数括号内,在{ openDialog }: { openDialog?: boolean }之后插入={}。 完整的写法如下:
function renderComponent({ openDialog }: { openDialog?: boolean } = {} ) {
    render(
      <Component />
    );
  
    if (openDialog) clickButton('Import Existing');
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接