【问题标题】:Typing non-classes against interfaces in TypeScript在 TypeScript 中针对接口键入非类
【发布时间】:2019-03-13 19:38:53
【问题描述】:

我的应用程序使用工厂助手来配置各种对象。每个工厂都实现了一个接口,允许对其进行模拟以帮助测试。传统上,每个工厂都是一个实现接口的类:

interface IRequestFactory {
    create(event: AWSLambda.APIGatewayProxyEvent): IRequest
}

class RealRequestFactory implements IRequestFactory {
    public create(event: AWSLambda.APIGatewayProxyEvent): RealRequest {
        return new RealRequest(event)
    }
}

class MockRequestFactory implements IRequestFactory {
    public create(event: AWSLambda.APIGatewayProxyEvent): MockRequest {
        return new MockRequest(event)
    }
}

RealRequestFactoryMockRequestFactory 可以被实例化并作为依赖注入到其他类中。然而,TypeScript 允许我们将任何东西声明为接口类型,因此可以这样做:

const realRequestFactory: IRequestFactory = {
    create(event: AWSLambda.APIGatewayProxyEvent): Request {
        return new Request(event)
    }
}

在这种情况下,我不需要实例化一个类,并且仍然可以将realRequestFactory 作为IRequestFactory 类型的依赖项注入。这种方法看起来更简单,但我不确定它是否会被视为最佳实践,因为它感觉有点像单例。

对于针对接口输入非类是否有共识?

【问题讨论】:

  • 好的,非常简短的回答,从观察野外的代码来看,我不得不说,对于做这件事的正确方法似乎没有任何共识。有人会争辩说,实现接口的实际类是更多的 OOP 方式,但另一个人可能会争辩说,“duck-typing”是用 JavaScript/TypeScript 编写东西的主要优势。
  • 好的,感谢您的回复。我想我会坚持课堂方式,因为它在其他 OO 语言中更熟悉

标签: typescript


【解决方案1】:

这是一个单例,是的,单例是 considered an anti-pattern,所以类更适合通过 Dependencji 注入容器进行测试和注入

【讨论】:

  • 感谢您的回答。我会坚持上课方式
猜你喜欢
  • 2013-09-19
  • 2021-09-16
  • 2016-08-05
  • 2021-07-31
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2018-09-08
相关资源
最近更新 更多