我有这样的类型:
type Cool = {
[key: string]: number
}
现在,假设我有一个该类型的对象:
let my: Cool = {
"asdf": 1,
"jkl": 2
}
当我运行 Object.entries(my)
时,我得到 [["asdf", 1], ["jkl", 2]]
。这似乎很正常。但是,我想将每个键组合成一个字符串,如下所示:
let mystring = "";
Object.entries(my).forEach(entry => {
mystring = entry[1] + mystring;
});
我希望 mystring
等于“jklasdf”,确实如此。但是,我在 mystring = ...
行收到流程错误。错误状态:
Cannot cast
Object.entries(...)[0][1]
to string because mixed [1] is incompatible with string
关于如何解决这个问题有什么想法吗?谢谢!
最佳答案
Object.entries
的类型为:
static entries(object: $NotNullOrVoid): Array<[string, mixed]>
当您尝试使用 mixed
的值时type 你必须首先弄清楚实际的类型是什么,否则你会得到一个错误,所以你可以使用 Flow 的 type refinement :
Object.entries(my).forEach(entry => {
if (typeof entry[1] === 'number') {
mystring = entry[1] + mystring;
}
});
你也可以只转换entry[1]
:
Object.entries(my).forEach(entry => {
mystring = Number(entry[1]) + mystring;
});
或将类型添加到 entry
像这样 entry: [string, any]
但请注意 using any
是完全不安全的,应尽可能避免。
关于javascript - Flow 允许与 object.entries 和字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485512/