为什么我丢失了使用扩展运算符输入参数



通过使用Octokit软件包,我想列出所有拉取请求(client.pulls.list(。

我有一个GitHubClient(Octokit的包装器(和GitHubService(GitHubClient的包装器(。GitHubService 有一个选项参数,使用具有perPage?: number;属性的接口,GitHubClient 接受具有属性per_page?: number;

在我的代码中,我丢失了 GitHubClient 类中options的类型检查。

我做错了什么以及如何正确设置选项类型?

import Octokit from '@octokit/rest';
interface PaginationParams {
  page?: number;
  // camelcase
  perPage?: number;
}
interface GitHubPaginationParams {
  page?: number;
  // underscored
  per_page?: number;
}
class GitHubClient {
  private client: Octokit;
  constructor() {
    this.client = new Octokit();
  }
  getPullRequests(options: PaginationParams) {
    // lost typings of "options" with spread operator (no typescript error)
    return this.client.pulls.list({ owner: 'octokit', repo: 'hello-world', state: 'open', ...options });
    // this works (typescript error)
    // return this.client.pulls.list({ owner: 'octokit', repo: 'hello-world', state: 'open', page: options.page, per_page: options.per_page });
    // this works
    // return this.client.pulls.list({ owner: 'octokit', repo: 'hello-world', state: 'open', page: options.page, per_page: options.perPage });
  }
}
class GitHubService {
  private ghClient: GitHubClient;
  constructor() {
    this.ghClient = new GitHubClient();
  }
  async getPullRequests(options: GitHubPaginationParams) {
    return this.ghClient.getPullRequests(options);
  }
}

我希望打字稿会抛出错误,因为 GitHubService 的options接口与 GitHubClient 界面中的options不同。

您的所有字段(在两个接口中(都是可选的 - 这意味着即使是空对象也实现了这些接口。一旦您标记字段为必填字段,预期行为就会起作用。

目前你有下一个:

interface PaginationParams {
  page?: number;
  // camelcase
  perPage?: number;
}
interface GitHubPaginationParams {
  page?: number;
  // underscored
  per_page?: number;
}
// cause none of the fields is required
var x:PaginationParams = {};
var y:GitHubPaginationParams = x;

如果删除page附近的? - 类型将与该字段兼容。如果将其删除以进行per_page/perPage - 则会收到预期的错误,或者必须同时提供这两个属性

相关内容

  • 没有找到相关文章

最新更新