gpt4 book ai didi

typescript - 在 Typescript 中返回多种类型的 Observable

转载 作者:行者123 更新时间:2023-12-02 20:54:55 36 4
gpt4 key购买 nike

我有一个方法,可以根据请求 url 返回一个对象或相同对象的数组。逻辑很简单;

myservice.service.ts:

private _url_User = "https://api.github.com/users/dummyuser";
constructor(private _http: Http){}

getUsers(followers?: boolean): Observable<User | User[]>{
this._url_User += followers?"/followers":"";//if followers equals true edit url, this returns array of same user object
return this._http.get(this._url_User).map(res=>res.json());
}

mycomponent.component.ts:

import { Component,OnInit } from '@angular/core';
import {Auth} from '../../services/auth.service';
import {CommentService} from '../../services/comment.service';
import {User} from '../../infrastructure/user';

@Component({
moduleId:module.id,
selector: 'app-comment',
templateUrl: '../../templates/comment.component.html'
})

export class CommentComponent implements OnInit{
user:User;
followers:User[];
constructor(private auth: Auth, private commentService: CommentService){
}
ngOnInit(){
this.commentService.getUsers().subscribe(d=>{ this.user=d[0]; console.log(this.user.email)});
this.commentService.getUsers(true).subscribe(d=>{this.followers=d; console.log(this.followers[0].email)});
}
}

这是我无法处理的错误消息; enter image description here

最佳答案

一般来说,我建议做的实际上是将其分为两个方法,而不是使用 bool 标志。这将变得更简单、更清晰,并且还可以免费解决您的打字问题。

如果您确实不想这样做,那么您需要添加 function overload按照你的方法。通过这些,您可以告诉 TypeScript 该函数始终返回标志设置为 false 的单个用户,或者如果标志设置为 true,则返回多个用户,并且您将获得您正在寻找的行为。

此函数的重载将如下所示:

getUsers(): Observable<User>;
getUsers(followers: false): Observable<User>;
getUsers(followers: true): Observable<User[]>;
getUsers(followers?: boolean): Observable<User | User[]>{
this._url_User += followers?"/followers":"";
return this._http.get(this._url_User).map(res=>res.json());
}

我已经整理了a working example在 Playground 上,如果您想确切地看到这一切是什么样子。

请注意,这确实保留了仍然存在的潜在歧义。 IE。如果你使用 bool 值调用 getUsers 并且在编译时 TypeScript 不知道这是 true 还是 false,它仍然会返回 Observable<User | User[]> 。您必须使用类型断言或类型保护来获取正确的类型 - 查看 Type Guards and Differentiating Types如果您不熟悉这些内容,请参阅手册中的部分。

关于typescript - 在 Typescript 中返回多种类型的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843675/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com