导出混合类型和模块
Exporting hybrid type and module
几个月来,我一直在 TypeScript 中愉快地使用 classes 和 CommonJS 外部模块中的 "attached" 模块进行开发,如下所示:
exports = JQ;
class JQ {
a = 0;
}
module JQ {
export class HelpClass {}
export interface Something {}
}
我喜欢这种模式,因为它使模块包含在文件中,减少了导入的数量,并且仍然公开了一个很好的 API。
现在,我不想导出 class,而是导出一个混合类型,这样它就可以用作具有其他功能和 classes "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 是 class 而不是混合类型时生成的代码完全一样)但编译器给出重复标识符错误,智能感知停止工作。
如果我删除额外的 class SomethingElse
,它会正常工作,所以我想这是导出混合类型的特殊情况。
我也在 TypeScript Playground 上测试了它并得到了相同的结果:尽管 class JQ
和 var JQ
都在 JS 中发出 var JQ
,当它是 class TypeScript 允许并接受它,否则不接受。
我正在尝试做的事情不受支持吗?但是,由于发出的 JS 是有效的,所以它是编译器中已有的功能,是否应该将此作为错误报告给 TypeScript 开发人员?
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
几个月来,我一直在 TypeScript 中愉快地使用 classes 和 CommonJS 外部模块中的 "attached" 模块进行开发,如下所示:
exports = JQ;
class JQ {
a = 0;
}
module JQ {
export class HelpClass {}
export interface Something {}
}
我喜欢这种模式,因为它使模块包含在文件中,减少了导入的数量,并且仍然公开了一个很好的 API。
现在,我不想导出 class,而是导出一个混合类型,这样它就可以用作具有其他功能和 classes "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 是 class 而不是混合类型时生成的代码完全一样)但编译器给出重复标识符错误,智能感知停止工作。
如果我删除额外的 class SomethingElse
,它会正常工作,所以我想这是导出混合类型的特殊情况。
我也在 TypeScript Playground 上测试了它并得到了相同的结果:尽管 class JQ
和 var JQ
都在 JS 中发出 var JQ
,当它是 class TypeScript 允许并接受它,否则不接受。
我正在尝试做的事情不受支持吗?但是,由于发出的 JS 是有效的,所以它是编译器中已有的功能,是否应该将此作为错误报告给 TypeScript 开发人员?
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