我遇到此流程问题string [1] is not an object
,其代码如下:
type User = {
name: string,
age: number,
gender?: string,
}
const user: User = {
name: 'xxx',
age: 23,
...(props.gender && { gender: props.gender }) // <----- the culprit is this line
}
你知道为什么吗?
其余对象散布运算符似乎没有正确支持有条件地设置键。
我解决了这个问题:
const user: User = {
name: 'xxx',
age: 23,
}
if (props.gender) {
user.gender = props.gender
}
但是我不想根据流类型放弃语言功能。
答案 0 :(得分:1)
Flow在此处的代码中捕获了合法的类型错误错误。如果gender
是一个空字符串,则您的代码等于
const user: User = {
name: 'xxx',
age: 23,
...""
};
虽然不是运行时错误,但绝对是奇怪的类型错误。您应该只在对象上使用对象传播语法。
最好的解决方法是在完成后分配属性,或者执行
...(props.gender ? { gender: props.gender } : null)
明确指出“如果性别是虚假的,请勿散布任何财产”。您也可以使用{}
代替null
,但这只是无缘无故地创建了一个额外的对象。
答案 1 :(得分:0)
通读此Github issue on object rest spread operator后,我发现了一种更好的解决方法。默认情况下,这是一个空对象。
所以我更改了这一行:
[{'Age': '48',
'Children': 'Josh,Beth',
'Disability': 'no',
'Name': 'Richard',
'city': 'Seattle',
'enterprenuer': 'yes'},
{'Age': '32',
'Children': '',
'Name': 'Bryan',
'Visa': 'no',
'city': 'NY',
'disability': 'no',
'enterprenuer': 'no',
'wfh': 'yes'}]
使用
...(props.gender && { gender: props.gender })
现在,流错误已解决。