Angular报错TS2345:string参数无法赋值给Pick<User,'email'>类型
解决Angular登录函数的类型不匹配错误
错误原因
你遇到的TS2345错误核心是类型不匹配:
Pick<User, "email">的类型是{ email: string },这是一个包含email属性的对象- 但你从表单传入的
this.loginForm.value.email是字符串类型,和函数要求的对象类型不兼容
修复方案
方案1:修改AuthService的login函数参数类型(推荐)
既然登录接口实际需要的是字符串格式的邮箱和密码,直接把参数类型改成对应原始类型即可:
// auth.service.ts login(email: string, password: string): Observable<{ token: string; uid: Pick<User, "uid">; }> { return this.http.post(`${this.url}/login`, { email, password }, this.httpOptions) // ... 其余代码保持不变 }
方案2:传入符合Pick类型要求的对象
如果不想修改服务的类型定义,就需要把表单值包装成对象传入:
// login.component.ts login():void{ this.auth.login( { email: this.loginForm.value.email }, { password: this.loginForm.value.password } ).subscribe(); }
额外说明
Pick<User, "email">的作用是从User接口中提取指定属性组成新的对象类型,比如Pick<User, "email">等价于{ email: string }。你之前误用了这个类型,把它当成了单个属性的类型,这才导致了类型不兼容问题。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

