我对typescript还不太熟悉,我可以打90%的代码基。但是,当涉及休息/传播运营商时,我完全不知所措。我今天在我们的代码中遇到了这个问题(我没有写这个),但是我发现它不起作用:

interface searchClient {
  searchForValues({
    name,
    query,
    ...qp,
  }: {
    name: string;
    query: string;
    qp: QpInterface;  //???this part doesn't work
  }): Promise<any>;
 }

interface QpInterface {
  page?: number;
  hits?: number;
  attributes?: string;
}

它不起作用,因为qp在键入时指定了键的名称,而我想键入的是...qp部分。...qp中的每个键/值对都由qpinterface键入。
下面是一个示例函数调用:
this.searchClient.searchForValues({
  name: 'title',
  query: 'little sheep',
  page: 5,
  hits: 2
});

我在文件上找不到很多东西。我试过把...qp: QpInterface;...QpInterface;放进去,但都没用。在参数中键入...qp的最佳方法是什么?

最佳答案

Until spread types are implemented in TypeScript,您可以使用intersection type来执行以下操作:

interface searchClient {
  searchForValues({
    name,
    query,
    ...qp,
  }: {
    name: string;
    query: string;
  }
    & QpInterface): Promise<any>;
 }

09-16 14:44