【问题标题】:TypeScript Object FactoryTypeScript 对象工厂
【发布时间】:2020-09-25 08:53:07
【问题描述】:

我正在尝试在 TypeScript 中构建一个对象工厂,其中生成的对象必须具有共同的基本类型,但我还没有弄清楚如何正确编码。

这是我当前的尝试,这是不正确的,因为 TypeScript 说 T 不能保证是 Base 类型。

class Base {
    constructor() {}
}


class User extends Base {
    constructor() {
        super()
    }
}

class Post extends Base {
    constructor() {
        super()
    }
}

function buildObject<T extends Base>(type: typeof Base): T {
    return new type()
}

我想我可以创建一个像 type BaseInstance&lt;T&gt; = T extends Base 这样的新类型来代替这里使用:

function buildObject<T>(type: typeof BaseInstance<T>): BaseInstance<T> {
    return new type()
}

但是这个构造 type BaseInstance&lt;T&gt; = T extends Base 是无效的。

【问题讨论】:

  • 使用type: new() =&gt; T 代替type: typeof Base 作为buildObject 参数。

标签: typescript


【解决方案1】:

尝试定义一个可以通过new关键字调用的类型BaseConstructor并返回一个Base实例。您的 Base、User 和 Post 类都满足此类型定义。

type BaseConstructor<T extends Base> = new() => T;

function buildObject<T extends Base>(type: BaseConstructor<T>): T {
    return new type();
}

const myObj: Post = buildObject(Post);

Playground Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多