【发布时间】:2019-07-23 22:15:33
【问题描述】:
我对 Typescript(和 Javascript)比较陌生,并且一直在搞乱类。我试图找到一种简洁的方法来创建一个对象,该对象将填充类似的条目,同时保持类型安全。
这是我写的代码:
let testFixture: Fixture = (() => {
let stringPrefix = 'TEST BaseEventDTO';
let result = {}; // The object to become a "Fixture".
['id', 'name', 'location'].forEach(element => {
result[`${element}`] = generateId(`${stringPrefix} ${element}`);
});
return result;
})();
在此代码中,Fixtures 具有必需的字符串字段id、name 和location。此外,我希望它们都在字段名称之前有 stringPrefix,如 foreach 中所示。我正在尝试创建一个对象,而无需多次键入相同的内容,例如前缀或字段名称。但是,结果是来自 VSCode 的警告 Type {} is missing the following properties of Type 'Fixture': 'id', 'name', and 'location'。
有没有一种传统的方式(或只是工作方式)来解决这个问题?
另外,澄清一下,我正在使用匿名函数编写此代码,以使 stringPrefix 变量成为本地变量。
编辑:将 return result; 更改为 return <Fixture>result; 修复了错误。但是如果我的解决方案是一个陷阱,或者如果有另一种更好的方法来做到这一点,我会留下这个。
为了进一步说明,最后的结果应该是这样的:
let result = {
id: generateID(`${stringPrefix} id`),
name: generateID(`${stringPrefix} name`),
location: generateID(`${stringPrefix} location`)
}
然后将其转换为“Fixture”类型。
【问题讨论】:
-
请添加结果的外观。
generateId在做什么? -
我已经用更多信息编辑了我的问题。够了吗?
-
generateID 采用给定的字符串并输出一个为数据库目的而编码的唯一字符串。
-
您对此感到困惑,而不仅仅是澄清:为了澄清,我正在使用匿名函数编写此代码,以使 stringPrefix 变量成为本地变量。您使用了箭头在 IFEE 中运行,这是完全没有必要的。您还使用字符串文字语法使代码过于复杂,这是不必要的。使用 var 名称和简单的串联。
-
@RandyCasburn 我不确定你的意思。据我所知,箭头功能是 IFEE。箭头函数周围只有括号。至于字面语法,我认为是意见。这对我来说比串联更具可读性。
标签: javascript typescript javascript-objects