使用<classname []>语法

时间:2017-03-21 13:05:21

标签: angular typescript ionic2 angular2-observables

我目前正在使用Ionic 2处理一个基本的聊天应用,并且几次遇到过这种语法:

private someFunction(): Observable<ClassName[]> {

我一直在寻找<ClassName[]>正在做什么,但不确定这是否是Ionic 2,Angular 2或Typescript特有的。

我搜索了每个人的文档,但我还没有找到任何参考文献。

2 个答案:

答案 0 :(得分:2)

正如评论中所说,它是一个Typescript语法方面,但在你的情况下,你正在使用RxJS Observable,它是Observer Design Pattern的一个实现。

最重要的是,Typescript's generics。让我们用更直观的方式来讨论它。

class List<T> {

    private _list: T[] = [];

    public get(index: number): T {
        return this._list[index];
    }

    public add(item: T) {
        return this._list.push(item);
    }
}

这样您就可以创建所有List种类的T

let myStrings = new List<String>();
let myNumber = new List<number>();
let myDates = new List<Date>();

使用正确的类型化方法:

myStrings.add("foo"); // it'll require a string type
myStrings.get(0); // returns "foo", a string typed var

现在,关于RxJS Obserable<T>,它几​​乎是一回事,通用T是您将要使用的对象类型。当某些事情发生时,必须通知部分代码时,Observable主要用于控制异步事件监听。例如:当ajax请求结束时,单击某个元素或超时结束时。

let userObservable = new Observable<User> .....

userObservable.subscribe(user => {
    console.log(user); // [User object], the user param will be typed to the Class User
});

您基本上订阅了一个可以使用T类型对象的observable。

答案 1 :(得分:0)

这是TypeScript泛型。

当您订阅此observable时,您应该会收到一个&#34; ClassName&#34;对象。