【问题标题】:TypeScript Error for multiple types [Observables]多种类型的 TypeScript 错误 [Observables]
【发布时间】:2021-09-02 17:54:25
【问题描述】:

我有以下解析器类

export class UserResolverService implements Resolve<Observable<IUserAccount[] | IUserMoreInfo>>{

constructor(
  private userService: UserService,
  private router: Router
){}

resolve(route: ActivatedRouteSnapshot): Observable<IUserAccount[] | IUserMoreInfo> {
.......
.........
        return this.userService.getUserAccounts(.....).pipe(
            take(1),
            map((res) => {
                console.log('Data', res);
                const data = res.data;
                const moreInfo = res.moreInfo;
                return {data, moreInfo};
            })
.......
........

}

}

对于上述 TS 抱怨以下错误,但是当我用 res.data 返回数据时,错误消失了。

输入'{数据:IUserAccount[];更多信息:IUserMoreInfo |不明确的; }' 缺少类型“IUserAccount[]”的以下属性:length、pop、push、concat 和 26 more.ts(2322)

发出请求的函数

public getUserAccounts = (....): Observable<IUserAccounts> => {
    return this.http.get<IUserAccounts>(`${url}`);
};

我的接口定义如下

export interface IUserAccounts {
    data: IUserAccount[];
    moreInfo?: IUserMoreInfo;
}

export interface IUserAccount{
   name: string
   ......
   .....
}

export interface IUserMoreInfo{
   alias: string
   .....
   ......
}

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    您的函数声明表明您希望它返回 IUserAccount[]IUserMoreInfo 的可观察流,并且您正在返回包含两种类型的自定义对象的可观察流,

    { data: IUserAccount[]; moreInfo: IUserMoreInfo | undefined; }
    

    所以你的返回类型与函数声明不匹配。您要么需要将返回类型更改为 moreInfodata(不能同时使用两者),要么需要更新函数签名。

    【讨论】:

    • 我需要同时返回的情况如何
    • 那么你需要改变你的函数签名来返回这个 Observable
    猜你喜欢
    • 2020-09-29
    • 2014-12-11
    • 2016-12-05
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2013-08-03
    • 2022-11-25
    • 2021-09-11
    相关资源
    最近更新 更多