我遇到了打字稿错误if (this.state.uploadFile !== undefined) {
const terms = this.state.uploadFile;
// Logic
}
。我正在使用Typescript创建SPA,并且在其中一个页面上,则可以上传文件。后端已经被写入,因此状态存储的文件将被制成服务器端读取的二进制代码。文件setstate设置为undefined。
我已经进行了几次搜索,但是解决方案似乎对我不起作用。第一个解决方案是创建一个if语句:
const terms = this.state!.uploadFile;
每当逻辑部分使用术语时,就会出现上述错误。
另一种解决方案是告诉编译器它已明确定义:
const terms = this.state.termSheet!;
这仍然引发相同的错误,并认为我可能已经放置了!在错误的位置,但是当我将其移至terms.getAsBinary()
时,在调用Property 'getAsBinary' does not exist on type 'never'
时会导致新错误,我收到错误// Imports
class SubmitIssue extends React.Component<StylesProps> {
state = {
alert: false,
amount: '',
uploadFile: undefined,
verify: false,
}
handleAmountChange(e) {
this.setState({ amount: e.target.value });
}
handleFileChange(e) {
this.setState({ uploadFile: e.target.files[0] });
}
handleVerifyChange() {
this.setState({ verify: !this.state.verify });
}
handleClick() {
const config = { headers: { 'Content-Type': 'multipart/form-data' } };
const bodyFormData = new FormData();
bodyFormData.set('Amount', this.state.amount);
bodyFormData.set('uploadFile', this.state.termSheet.getAsBinary());
bodyFormData.set('Verify', this.state.verify.toString());
axios.post(
`${process.env.API_URL}RegisterIssue/Create`,
bodyFormData,
config
).then(res => {
console.log(res);
this.setState({ alert: true }, function() { this.sendData(); });
}).catch((error) => {
console.log(error);
})
}
sendData() {
const alertState = this.state.alert;
this.props.parentAlertCallback(alertState);
}
render() {
return (
// Design
);
}
}
export default withStyles(styles)(SubmitIssue);
上下文中的代码
ArrayList<String> myList = new ArrayList<String>() {
@Override
public boolean remove(String str) {
//If you want, you can throw Unsupported operation exception also.
return false;
}
};
因此,我对于处理此错误的正确方法有些困惑。
答案 0 :(得分:1)
这是因为您仅检查state.uploadFile
而使用state.termSheet
。
有两种可能的解决方案:
您设置了默认值(如果未定义terms
):
const terms = this.state.termSheet ? this.state.termSheet : defaultValue;
或者您也检查if
语句中的术语:
if (this.state.uploadFile && this.state.termSheet)