有一个对象定义了一些字符串
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,而且我的演员技巧可能还有很长的路要走。我该如何投这个?
答案 0 :(得分:1)
尝试在COMPARISON_OPERATORS
声明中添加一些类型信息。
假设您的键(和值)属于string
类型,您可以执行以下操作以保持对象文字语法:
static readonly COMPARISON_OPERATORS: {[key: string]: string;} = {
"=": "equals",
"!=": "notequals",
//...
}
其次,您尝试使用动态键定义对象的属性。定义对象文字时无法完成此操作。
要使用动态密钥,您需要声明一个对象,然后手动添加密钥:
const myObject: {[key: string]: string;} = {};
myObject[QueryObject.EQUALS] = "equals";
// ...etc.