TypeScript 错误:在 Ionic Framework 中期望 0 个参数,但实际得到了 2 个。

8

Typescript编译器提示我这个错误:

typescript: src/pages/login/login.ts, line: 33 预期0个参数,但却得到了2个。 L32: this.auth.loginAPI(this.registerCredentials) L33: .subscribe(response => {

这是代码中的问题(包含2个文件):

// auth-provider.ts
public loginAPI(credentials: {email:string,password:string}) {
  return this.http.post(this.apiUrl,data);
}

// login.ts
this.auth.loginAPI(this.registerCredentials)
  .subscribe(response => { 
    console.log(response);
  }, err => {
    console.log(err);
  });

有趣的是,代码可以正常运行(我编辑任何文件,我的ionic serve重新加载并且页面没有任何问题)。

有什么想法吗?

环境 cli packages: (/usr/local/lib/node_modules)

@ionic/cli-utils  : 1.19.0
ionic (Ionic CLI) : 3.19.0

全局包:

cordova (Cordova CLI) : 7.0.1

本地软件包:

@ionic/app-scripts : 3.1.5
Cordova Platforms  : ios 4.4.0
Ionic Framework    : ionic-angular 3.9.2

系统:

Node  : v8.9.3
npm   : 5.5.1
OS    : macOS High Sierra
Xcode : Xcode 9.2 Build version 9C40b

为了澄清,我已经尝试传递两个单独的参数,一个类,甚至只传递一个参数来测试它,每次都会得到相同的编译器错误。即使SublimeText也会突出显示错误:这是否意味着我们应该用另一种方式来做? - ddalcero
编译器报告的问题出在.subscribe上,而不是传递给loginAPI的凭据。我正在编辑问题以更好地澄清它。 - ddalcero
2个回答

6
问题出在loginAPI函数定义上。 将返回类型添加为Observable<any>可以让编译器满意并解决问题。
// auth-provider.ts
public loginAPI(credentials: {email:string,password:string}):Observable<any> {
  return this.http.post(this.apiUrl,data);
}

虽然我还不是很理解为什么,但至少现在它已经成功编译没有任何错误了。


你找到这个发生的原因了吗? - davecar21
@davecar21 对我来说,编译器似乎强制声明返回类型... - ddalcero
除了使用 Observable<any> 之外,还有其他的方法吗? - davecar21
@davecar21 取决于您的函数返回类型。您想要实现或解决什么问题? - ddalcero

1
为了处理这个问题,您可以创建一个如下的类:
public class credentials export {
   email : string;
   password: string;
}

然后,

public loginAPI(inCredentials : credentials ) {
  return this.http.post(this.apiUrl,data);
}

尝试使用类、数组、两个单独的参数...都不行,每次都是同样的错误。 - ddalcero
使用数组是什么意思? - Sajeetharan
我将我在第一篇帖子中传递的对象 ({email:string,password:string}) 称为数组。 - ddalcero
1
我知道,但无论如何都不起作用。即使使用您提出的解决方案,我仍然遇到相同的错误。 - ddalcero

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