如何定义AngularJS Typescript输出对象,它是ng.IPromise< {}>的一部分?

时间:2014-07-28 13:44:44

标签: angularjs typescript

我有这个功能:

getTopics = (params) => {
    var defer = this.$q.defer();
    this.$http({
        cache: this.utilityService.oyc,
        url: '/api/Topic/GetMapData' + params,
        method: "GET"
    })
        .success(function (data: { topicId: number; subTopicId: number; topicName: string; subTopicName; string; }[] ) {
            var output = {
                data: _.chain(data)
                    .uniq(true, 'topicId')
                    .map(function (t) { return { id: t.topicId, name: t.topicName }; })
                    .value(),
                dataMap: _.reduce(data, function (rv, v) {
                    rv[v.subTopicId] = v;
                    return rv;
                }, {}),
                topicNameMap: _.reduce(data, function (rv, v) {
                    rv[v.topicId] = v.topicName;
                    return rv;
                }, {}),
                dataPlus:
                [{ id: 0, name: '*' }].concat(
                    _.chain(data)
                        .uniq(true, 'topicId')
                        .map(function (t) { return { id: t.topicId, name: t.topicName }; })
                        .value())
            };
            defer.resolve(output);
        })
        .error(function () {
            defer.reject();
        });
    return defer.promise;
};

当我将鼠标悬停在该功能上时,它会向我显示它返回ng.IPromise< {}>

有人可以给我一些建议,告诉我如何向返回的对象添加更多信息。我并不是在寻找一个完整的解决方案,但我会欣赏一些关于如何定义输出的提示,例如{ data: }

1 个答案:

答案 0 :(得分:2)

ng.IPromise<T>是通用的,因此返回类型可以是ng.IPromise<IAnything>

因此,您可以输出IAnything类型的输出:

var output = <IAnything>{
...
};

并将getTopics函数返回值定义为ng.IPromise<IAnything>

你也可以这样创建你的延迟对象:

var defer = this.$q.defer<IAnything>();