现在的情况:
有一个类定义在:
lib/components/widgets/MyWidget.ts:
export class MyWidget {
public property1: string;
/* ... more properties ... */
}
它被编译为 javascript,与其他文件捆绑在一起,作为lib-min.js 的结果
所以因为它在lib/components/widgets/MyWidget.ts我做了一个定义“集合”文件(mydefinition.d.ts),如:
declare module "lib/components/widgets" {
export class MyWidget {
/* documentation of property1 */
public property1: string;
/* ... more properties ... */
}
}
interface MyOption {/* ... */}
通过这种方式,它可以像这样使用(当然在将lib-min.js 包含到页面中之后):
import { MyWidget } from "lib/components/widgets/MyWidget";
let myInstance = new MyWidget();
问题:
我认为很明显,保持这种重复是压倒性的,很容易导致错误。同样在升级到 typescript 2+(从 1.8.9 开始)后,我收到了几个“重复标识符”的编译错误,而且通常它不像以前那样工作。
- 我可以制作一个像 IMyWidget 这样的接口并将其公开,但随后缺少实现并且无法使用 new 创建
- 我可以从mydefinition.d.ts中删除“声明模块...”,但是模块加载器将找不到模块(因为 r.js 优化器从它的路径中命名模块)
问题
是否有一种干净且“便宜”的方法来解决这个问题(并尽可能避免代码重复)?