打字稿中模块库的设计模式

时间:2017-03-13 04:58:19

标签: typescript design-patterns

我正在将一个JavaScript项目移植到TypeScript中。但是,我很难找到一个良好的模块化设计模式。

基本理念

我的库提供核心/最小功能。举个例子,假设它将浏览器规范作为对象返回:

{
    browser:"chrome",
    version:"15.0.3",
    platform:"windows",
    screen-width:"1200",
    // .. etc
}

此库将通过NPM安装。但是为了充分利用库,用户必须安装处理上述对象的“模块”才能产生不同的结果。

例如,一个模块将提供此版本浏览器不支持的CSS功能。

{
    unsupportedFeatures:[
        "a",
        "b",
        "c",
        // ... etc
    ]
}

另一个模块将获取核心库结果和上述模块结果并处理DOM以查看是否存在任何不受支持的CSS定义。

{
    notWorking:[
        "a",
        "b",
        // ... etc
    ]
}
  

注意:这不是库的实际功能,它只是一个例子来说明模块如何依赖核心库结果和彼此的结果。

我尝试了什么

我尝试将核心库定义为函数,然后将模块添加为原型。

这样做的一个问题是核心库和添加的原型函数都没有类型定义。

我也尝试将核心库定义为一个类,但这也没有用,现在编译错误。

我也尝试过合并命名空间接口声明,但它会导致其他编译错误。

此时,我没有想法,以上所有解决方案都是有效的JavaScript,但在TypeScript中并不起作用。

如何在TypeScript中解决此问题?我认为用这种方式编写模块化/可扩展的库是很常见的,那么它应该遵循什么样的理想设计模式呢?鉴于它为核心库,模块作者和用户提供了类型安全和自动完成。

1 个答案:

答案 0 :(得分:0)

我已将您的游乐场代码更改为我可能使用的内容:

findOne