找不到类工厂函数的返回值

时间:2018-12-21 19:48:43

标签: typescript typescript-typings

我正在尝试创建一个返回类的函数,但是我找不到应该的类型定义,因此我创建了一个示例 对于接口IOtherFactory中的TestItem,我已经尝试过

  • TestItem: ISomeClass<string>;
  • TestItem: ReturnType<typeof moduleSomeFactory>;
  • TestItem: { new <T extends ISomeClass<string>>(): T };

还有其他一些变化。如果我将SomeThing<string>更改为SomeThing<any>,则可以使用,但是在实际代码中是不可接受的

这是我的代码

export interface ISomeClass<T> {
  t: T;
}

export function moduleSomeFactory() {
  return class SomeClass<T> implements ISomeClass<T> {
    t: T;
    constructor(t: T) {
      this.t = t;
    }
  };
}

interface IOtherFactory {
  TestItem: ISomeClass<string>;
}

export function someOtherFactory(): IOtherFactory {
  const SomeThing = moduleSomeFactory();
  class TestItem extends SomeThing<string> {}
  return {
    TestItem,
  };
}

1 个答案:

答案 0 :(得分:1)

要解决类型错误,您可以指定一个构造函数签名,该签名将返回ISomeClass<string>

export interface ISomeClass<T> {
    t: T;
}

export function moduleSomeFactory() {
    return class SomeClass<T> implements ISomeClass<T> {
        t: T;
        constructor(t: T) {
            this.t = t;
        }
    };
}

interface IOtherFactory {
    TestItem: new (s: string) => ISomeClass<string>;
}

export function someOtherFactory(): IOtherFactory {
    const SomeThing = moduleSomeFactory();
    class TestItem extends SomeThing<string> { }
    return {
        TestItem,
    };
}