缺少Typescript /// reference时,是否有可能获得静态属性的设计/构建时错误?

时间:2017-01-08 18:56:15

标签: typescript

我有一个Typescript项目,它生成一个捆绑的.js库,用于客户端webapps。我正在使用命名空间和///引用。当库中的一个文件依赖于另一个文件并且没有///引用时,我想得到设计/构建时错误;否则,直到运行时才会被发现。

通过以下内容,我得到了一个很好的编译时错误:

// AClass.ts
namespace test {
    export class AClass extends ZClass {
        constructor() {
            super();
        }
    }
}
...
// ZClass.ts
namespace test {
    export class ZClass {
        constructor() {
        }
    }
}

TSC构建按预期抱怨error TS2690: A class must be declared after its base class,并按预期再次添加/// <reference path=’zclass.ts’修复它。这就是我要找的。

问题是当你实例化一个静态变量时,它似乎不会在构建时被捕获。例如,按如下方式更改上述代码:

// AClass.ts
namespace test {
    export class AClass {
        static z = new ZClass();
        constructor() {
        }
    }
}
...
// ZClass.ts
namespace test {
    export class ZClass  {
        constructor() {
        }
    }
}

现在编译时,不会发出构建错误;但是当你运行时,得到"test.AClass is not a constructor",因为在捆绑的.js文件中此时没有定义ZClass;该定义发生在AClass之后。如果切换对象名称,则可以正常工作。或者,如果您将/// <reference path="ZClass.ts"/>添加到AClass.ts,它就可以。

在这种情况下,TSC是否可以输出构建错误?我担心的是很容易错过添加其中一个引用。

推论:使用模块和导入很好地解决了这个问题,但我遇到了这种方法的其他问题(在这个SO问题中讨论过:How to structure Typescript library code to generate d.ts file that can be used by Typescript app?),所以我正在探索是否可以使命名空间工作这里。

0 个答案:

没有答案