如何指定类构造函数的返回类型(例如使用代理)?

时间:2017-08-02 05:37:21

标签: javascript typescript

我对Typescript世界很陌生。当我使用Proxy作为类构造函数的返回值时,我偶然发现了一个问题。

想象一下以下代码:

class Container {
  constructor() {
    return new Proxy(this, containerProxyHandler);
  }
}

const container = new Container();

container.sessionStorage = () => {
  return new SessionStorage('SESSION_ID');
};

container.session = factory(() => {
  return new Session(container.sessionStorage);
});

container.random = protected(() => {
  return Math.random();
});

Container类型旨在用作依赖注入容器。因此,由于它将存储可变数量的服务,因此无法在Container类内分配属性。

验证后,当向其分配箭头功能时,它会抱怨sessionStorage类型中缺少属性sessionrandomContainer

Property 'sessionStorage' does not exist on type 'Container'

我当然可以通过as自己为容器变量分配一个类型,或者使用工厂函数,但是发现这种方法对于其他人来说很麻烦,例如在库的情况下。

const container = new Container() as { [key: string]: any };

是否有更简单的解决方案,而无需额外的样板代码?

1 个答案:

答案 0 :(得分:1)

您可以为它创建一个界面:

interface SomeType { 
  [name: string]: any; 
}