TypeScript 在命名空间下扩展 JQuery

Posted

技术标签:

【中文标题】TypeScript 在命名空间下扩展 JQuery【英文标题】:TypeScript extend JQuery under Namespace 【发布时间】:2016-01-21 12:36:05 【问题描述】:

我正在尝试通过 TypeScript 中的函数扩展默认的 JQuery 接口和默认对象 jQuery

代码

/// <reference path="jquery.d.ts" />

namespace MyNameSpace 
    var $ = jQuery;
    export interface JQuery 
        test(options: Object): JQuery;
    
    $.fn.test = function(options: Object): JQuery 
        if (this.length === 0) 
            console.log('Error!');
            return this;
        
        console.log(options);
        return this;
    
    export var testBody = function() 
        jQuery('body').test( 'HELLO': 'TEST' );
    

问题

现在我在控制台中运行以下代码: tsc -m amd -t ES5 Test.ts -d

我收到此错误:Test.ts(17,19): error TS2339: Property 'test' does not exist on type 'JQuery'.

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

这对我有用:

/// <reference path="typings/jquery/jquery.d.ts" />

interface JQuery 
    test(options: Object): JQuery;


namespace MyNameSpace 
    var $ = jQuery;

    $.fn.test = function(options: Object): JQuery 
        if (this.length === 0) 
            console.log('Error!');
            return this;
        
        console.log(options);
        return this;
    ;
    export var testBody = function() 
        jQuery('body').test( 'HELLO': 'TEST' );
    

编辑:第二个解决方案

/// <reference path="typings/jquery/jquery.d.ts" />

namespace MyNameSpace 

    interface JQueryX extends JQuery 
        test(options: Object): JQuery;
    

    $.fn.test = function(options: Object): JQuery 
        if (this.length === 0) 
            console.log('Error!');
            return this;
        
        console.log(options);
        return this;
    ;

    export var testBody = function() 
        let a:JQueryX = <JQueryX>$('body');
        a.test( 'HELLO': 'TEST' );
        // OR
        (<JQueryX>$('body')).test( 'HELLO': 'TEST' );
    

您可以通过重构使testBody 更好。

【讨论】:

以上是关于TypeScript 在命名空间下扩展 JQuery的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript:如何在命名空间中使用内部接口

关于TypeScript命名空间

TypeScript入门八:TypeScript的命名空间

TypeScript 从类 + 命名空间拆分接口

TypeScript 命名空间

TypeScript躬行记——命名空间