最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何将模型与模块一起导出?

运维笔记admin10浏览0评论

如何将模型与模块一起导出?

如何将模型与模块一起导出?

我正在编写一个模块,为我们的团队正在使用的测试套件添加一些功能。这是一个包含主要打字稿文件的项目,它包装了我们项目的其他导出。

index.d.ts:

export * from "./OneModule"
export * from "./AnotherModule"

其中一个模块具有向Chai.js断言库添加新方法的功能。这是通过使用它的函数来添加新方法来实现的,例如:

assertion.addChainableMethod('newMethod', callback, chainCallback)

将添加写expect(something).to.be.newMethod()语句的能力。但是,TypeScript不能识别那些新方法,因为@types/chai中的Assertion类型显然没有这些功能。

我已经创建了与Chai Assertion合并的接口定义,如下所示:

declare namespace Chai {
    interface Assertion {
        newMethod(something: string): Assertion;
        newMethod: Assertion;
    }
}

addChainableMethod添加了新方法,因此它也可以像expect(something).to.be.newMethod.equals()一样链接,这就是为什么它必须被定义为属性和方法。

问题是,无论我如何将上述声明添加到index.d.ts,新的断言在导入项目中都不可见。我怀疑它以某种方式包含在模块名称空间中(但我可能会非常错误)。我知道我可以做@types/newAssertions并在那里定义它们,但这需要用户在package.json中包含2个项目,并且还要求我们的开发人员一次处理2个项目。如何导出我的Chai命名空间扩展和我拥有的所有模块?

我设法做的最好就是这样:

declare module 'my-module' {
    function AddNewAssertions(chai: any, utils: any): void;
}
declare namespace Chai {
    interface Assertion { //same as above }
}

但是有了这个,我无法公开我的其他模块,它只有在我只暴露AddNewAssertions函数时才有效,这会添加那些断言。这很完美。

回答如下:

我为此敲了一个非常基本的测试应用程序,并且我在添加时取得了一些成功:

declare global {
    namespace Chai {
        interface Assertion {
            newMethod(something: string): Assertion;
            newMethod: Assertion;
        }
    }
}

这使得扩展在您的其他模块中可见,而不仅仅是具有声明的模块。

发布评论

评论列表(0)

  1. 暂无评论