首页 > 解决方案 > 如何根据对象中类的映射键创建对象?

问题描述

假设我们有以下情况:

class BaseClass {
    // ....some logic
}

class A extends BaseClass{

    name: string;

    constructor(name: string) {
        this.name = name
    }
    someMethodFromInside() {
       // ....some logic
    }
}

class B extends BaseClass {
    name: string;

    constructor(name: string) {
        this.name = name
    }
    someMethodFromInside() {
       // ....some logic
    }
}

然后我想根据我从外部获取的一些字符串值选择我正在创建的类的哪个对象:

const someStringFromOutside = 'key1'

const obj: IHandler = {
     'key1': A,
     'key2': B
}

try {
    // here i would like to create object based on value in string choose to pick up class and create 
    // object
    new obj[someStringFromOutside]('somevariable').someMethodFromInside()
} catch(err) {
    ...some error handling
}

因为我正在使用 TypeScript 编写,所以我还必须知道如何在处理程序中正确键入接口:我试图通过某种 ObjectConstructor 来获取接口中的值。但这是通用的,打字稿向我显示错误。

enum HandlerEvents {
    KEY_1 = 'key1',
    KEY_2 = 'key2'
}

interface IHandler {
     [key in HandlerEvents]: .....what should be here ?
}

标签: javascripttypescript

解决方案


推荐阅读