1

现在的情况:

有一个类定义在:

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 优化器从它的路径中命名模块)

问题

是否有一种干净且“便宜”的方法来解决这个问题(并尽可能避免代码重复)?

4

0 回答 0