从object中定义的字符串中解析方法名称

时间:2018-01-16 21:31:01

标签: typescript

有一个对象定义了一些字符串

CREATE TABLE elements
(
    atomic_number   INTEGER NOT NULL PRIMARY KEY
                    CHECK (atomic_number > 0 AND atomic_number < 120),
    symbol          CHAR(3) NOT NULL UNIQUE,
    name            CHAR(20) NOT NULL UNIQUE,
    atomic_weight   DECIMAL(8, 4) NOT NULL,
    pt_period       SMALLINT NOT NULL
                    CHECK (pt_period BETWEEN 1 AND 7),
    pt_group        CHAR(2) NOT NULL
                    -- 'L' for Lanthanoids, 'A' for Actinoids
                    CHECK (pt_group IN ('1', '2', 'L', 'A', '3', '4', '5', '6',
                                        '7', '8', '9', '10', '11', '12', '13',
                                        '14', '15', '16', '17', '18')),
    stable          CHAR(1) DEFAULT 'Y' NOT NULL
                    CHECK (stable IN ('Y', 'N'))
);

INSERT INTO elements VALUES(  1, 'H',   'Hydrogen',        1.0079, 1, '1',  'Y');
…
INSERT INTO elements VALUES(118, 'Og',  'Oganesson',     294.2100, 7, '18', 'N');

然后我试图在另一个对象static readonly COMPARISON_OPERATORS = { [QueryObject.EQUALS]: "equals", [QueryObject.NOTEQUALS]: "notequals", ... }

上调用一些方法
c

我得到了所有着名的&#34;元素隐含有任何类型&#34;。我试图将其转换为避免错误

c[QueryObject.COMPARISON_OPERATORS[operator]].apply(c, args);

我暂时没有使用过ts,而且我的演员技巧可能还有很长的路要走。我该如何投这个?

1 个答案:

答案 0 :(得分:1)

尝试在COMPARISON_OPERATORS声明中添加一些类型信息。

假设您的键(和值)属于string类型,您可以执行以下操作以保持对象文字语法:

static readonly COMPARISON_OPERATORS: {[key: string]: string;} = {
    "=": "equals",
    "!=": "notequals",
    //...
}

其次,您尝试使用动态键定义对象的属性。定义对象文字时无法完成此操作。

要使用动态密钥,您需要声明一个对象,然后手动添加密钥:

const myObject: {[key: string]: string;} = {};
myObject[QueryObject.EQUALS] = "equals";
// ...etc.