使用 <ClassName[]> 语法

Use of <ClassName[]> syntax

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

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

我一直想了解 <ClassName[]> 在做什么,但我不确定这是否是 Ionic 2、Angular 2 或 Typescript 特有的东西。

我已经搜索了每个文件的文档,但尚未找到对此的任何参考。

正如评论中所说,它是一个 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 是您将使用的对象类型。 Observables 主要用于控制异步事件监听,当某些事情发生时必须通知您的部分代码。例如:当 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.

类型的对象一起使用的可观察对象

这是 TypeScript 泛型。

当您订阅这个可观察对象时,您应该会收到一个包含 "ClassName" 个对象的数组。