【问题标题】:Typescript | Argument of type '{ username: string; password: string; }' is not assignable to parameter of type 'string'打字稿 | '{ username: string; 类型的参数密码:字符串; }' 不可分配给“字符串”类型的参数
【发布时间】:2019-10-30 23:11:27
【问题描述】:

我有一个简单的服务,它接受端点并执行 HTTP_CALL。下面是这个:

export const updatePassword = (data: {
  username: string;
  password: string;
}): HttpResponse<string> => {
  const { username, password } = data;
  const options = {
    method: httpMethod.POST,
    url: endpoint.UPDATE_PASSWORD({
      username,
      password
    })
  };
  return instance(options);
};

但我收到此错误:

Argument of type '{ username: string; password: string; }' is not assignable to parameter of type 'string'.

我不确定他的问题是什么,因为我在上面几行做完全相同的事情并且我没有收到错误。

如果您需要我要访问的端点,这里是:

  UPDATE_PASSWORD: (username: string) => `${prefix}/${username}/password`,

此外,HttpRespone 是AxiosResponse Generic 的扩展,instance 是AxiosRequestConfig 的扩展,以及一些自定义泛型。

//更新。这是转换后的方式:

export const updatePassword = (data: { username: string }): HttpResponse<string> => {
  const { username } = data;
  const options = {
    method: httpMethod.POST,
    url: endpoint.UPDATE_PASSWORD(username)
  };
  return instance(options);
};

【问题讨论】:

  • 您的UPDATE_PASSWORD 接受string 类型的参数并且您正在传递对象。而是仅发送 username 或修改您的 UPDATE_PASSWORD 以接受 object 作为参数。
  • 我按照您的建议将其转换为,请参阅说明,但现在我不确定,它会更新密码。你能解释清楚一点吗?
  • - 您也需要传递密码字段。修改 UPDATE_PASSWORD 参数使其接受对象,或者您可以使其接受两个参数,一个用于用户名,另一个用于密码。

标签: javascript reactjs typescript generics axios


【解决方案1】:

您正在寻找的是 JSON.stringify,而不是将您的 javascript 对象转换为 JSON 文本。

【讨论】:

  • 不,这实际上是非常错误的。服务没有理由做 JSON.Stringify。他们需要纯洁。以获取数据的方式传递数据,或以相同的方式发送数据。
  • 我认为使用此功能没有任何障碍。
【解决方案2】:

您可以使UPDATE_PASSWORD 接受两个参数 - 一个用于用户名,另一个用于密码。

UPDATE_PASSWORD: (username: string, password: string) => `${prefix}/${username}/password`,

export const updatePassword = (data: {
  username: string;
  password: string;
}): HttpResponse<string> => {
  const { username, password } = data;
  const options = {
    method: httpMethod.POST,
    url: endpoint.UPDATE_PASSWORD(username, password)
  };
  return instance(options);
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2018-06-19
    • 1970-01-01
    • 2022-01-17
    • 2021-07-02
    • 2021-09-21
    • 2021-06-16
    相关资源
    最近更新 更多