我很高兴在TypeScript中使用带有#34;附加"的类开发了好几个月。 CommonJS外部模块中的模块如下:
exports = JQ;
class JQ {
a = 0;
}
module JQ {
export class HelpClass {}
export interface Something {}
}
我喜欢这种模式,因为它使模块包含在文件中,减少了导入次数,并且仍然提供了一个很好的API。
现在,我没有导出一个类,而是想导出一个混合类型,以便它可以用作具有其他函数和类的函数" inside",例如jQuery,Underscore等等。其他图书馆也可以。
我知道如何声明以及如何在TypeScript中创建混合类型,但是无法通过附加模块导出它。我确实获得了正确发出的JS代码,但编译器抱怨。
例如,这个:
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 Playground上测试了它并获得了相同的结果:尽管class JQ
和var JQ
都在JS中发出var JQ
,但是当它是类时,TypeScript允许并接受它,否则没有。
我试图做的是不受支持的吗?但是,由于发出的JS是有效的,所以它是编译器中已经存在的一个特性,是否应该将其报告为TypeScript开发人员的错误?
答案 0 :(得分:0)
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