首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出混合类型和模块

导出混合类型和模块
EN

Stack Overflow用户
提问于 2015-08-08 05:03:21
回答 1查看 164关注 0票数 0

几个月来,我一直在TypeScript中愉快地使用CommonJS外部模块中带有“附加”模块的类进行开发,如下所示:

代码语言:javascript
复制
exports = JQ;

class JQ {
    a = 0;
}

module JQ {
    export class HelpClass {}
    export interface Something {}
}

我喜欢这种模式,因为它使模块包含在文件中,减少了导入的数量,并且仍然公开了一个很好的API。

现在,我不想导出一个类,而是导出一个混合类型,这样它就可以作为一个“内部”具有其他函数和类的函数使用,比如jQuery、下划线和许多其他库。

我知道如何在TypeScript中声明和创建混合类型,但是不能通过附加模块导出它。我确实获得了发出的JS代码的权限,但是编译器会抱怨。

例如,这是:

代码语言:javascript
复制
export = JQ;

var JQ = <JQ.JQStatic>function (a:string) { return a; };
JQ.method = function() { return 1; };

module JQ {
    export interface JQStatic {
        (a:string):string;
        method() :number;
    }

    // Additional class here
    export class SomethingElse {}
}

生成类似于正确的JS代码(与如果JQ是类而不是混合类型时生成的代码完全相同),但编译器提供重复的标识符错误,并且intellisense停止工作。

如果删除额外的类SomethingElse,它将正确工作,因此我认为这是导出混合类型的特例。

我还在TypeScript游乐场上测试了它,得到了相同的结果:尽管class JQvar JQ都在JS中发布了一个var JQ,但是当它是一个类时,TypeScript允许并接受它,否则就不会。

我想做的事没有人支持吗?但是,由于发出的JS是有效的,所以它是编译器中的一个特性,是否应该将其报告为TypeScript devs的一个bug?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-08 10:58:16

代码语言:javascript
复制
function JQ(a: string) { return a; }

module JQ {
    export class SomethingElse { }

    export function method() { return 1; }
}

export = JQ;

请参阅https://github.com/Microsoft/TypeScript/wiki/Declaration-Merging

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31889836

复制
相关文章

相似问题

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