首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeScript 0.9泛型: JQueryPromise<T>结果编译为JQueryPromise<any>

TypeScript 0.9泛型: JQueryPromise<T>结果编译为JQueryPromise<any>
EN

Stack Overflow用户
提问于 2013-07-14 05:54:37
回答 1查看 2.1K关注 0票数 2

我目前正在使用TypeScript 0.9.0.1,并在进行AJAX调用时使用JQueryPromise接口。我刚刚开始实现新的泛型功能,并注意到在调用在被调用函数中设置类型的泛型函数时,我没有获得intellisense。

我想调用userService.GetRole()并返回JQueryPromise< Role >类型,但是在这个场景中它不会.它返回JQueryPromise< any >,并且intellisense在“角色”变量上不工作:

代码语言:javascript
运行
复制
/// <reference path="../declarations/jquery.d.ts" />

interface Role {
    Id: number;
    Name: string;
}

module Services {

    export class UserService {

        //Non-Generic Call
        GetRole<Role>(): JQueryPromise<Role>{
            return $.get('/url');
        }

    }

}

$(function () {

    var userService = new Services.UserService();

    //GetRole() is returning JQueryPromise<any> and not JQueryPromise<Role> as declared
    userService.GetRole().then((role) =>
        //role is inferred as type 'any' and not 'Role' so intellisense does not work
        console.log(role.Name)
    );

});

下面给出了intellisense,但是我必须输入userService.GetRole<角色>(),而不仅仅是userService.GetRole():

代码语言:javascript
运行
复制
/// <reference path="../declarations/jquery.d.ts" />

interface Role {
    Id: number;
    Name: string;
}

module Services {

    export class UserService {

        //Generic Call
        GetRole<T>(): JQueryPromise<T> {
            return $.get('/url');
        }

    }

}

$(function () {

    var userService = new Services.UserService();

    userService.GetRole<Role>().then((role) =>
        //Intellisense now works but I have pass the type '<Role>' every call
        console.log(role.Name)
    );

});

所以我的问题是:是否有一种方法来调用userService.GetRole().then((角色) ...etc )。将“角色”参数识别为“角色”类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-14 06:43:26

取决于希望泛型变为活动的级别。你可以把它移到你的课堂上:

代码语言:javascript
运行
复制
module Services {

    //Generic Class
    export class UserService<T> {    

        GetRole(): JQueryPromise<T> {
            return $.get('/url');
        }    
    }    
}

$(function () {

    var userService = new Services.UserService<Role>();

    // You don't need role in every call anymore 
    userService.GetRole().then((role) =>
        console.log(role.Name)
    );    
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17636925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档