我创建了一个TS断言函数,稍后,在将请求DTO传递到UI事件处理程序中的API服务之前使用它。
function assertIsGetCampaignPackageReqDTO(
value: any,
): asserts value is GetCampaignPackageRuquestDTO {
if (!value.campaignId || !value.packageCode) {
throw new Error('campaignId or packageCode is empty!');
}
}
const onSearchFormSubmit = async (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
try {
assertIsGetCampaignPackageReqDTO(searchCondition);
const { value } = await getCampaignPackageQuery.execute(searchCondition);
if (value?.code === '0') {
setCampaignPackages(campaignPackages.concat(value.result));
}
} catch (error) {
message.error(error.message);
}
};
我应该使用吗
try...catch
语句,并向用户显示错误消息?或者,我应该验证合法性(
if
语句)。断言函数仅用于通过TSC检查?
或者这样:
function assertIsGetCampaignPackageReqDTO(
value: any,
): asserts value is GetCampaignPackageRuquestDTO {
if (!value.campaignId || !value.packageCode) {
throw new Error('value is not GetCampaignPackageRuquestDTO');
}
}
const onSearchFormSubmit = async (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
if (!searchCondition.campaignId || !searchCondition.packageCode) {
return message.error('campaignId or packageCode is empty!');
}
assertIsGetCampaignPackageReqDTO(searchCondition);
const { value } = await getCampaignPackageQuery.execute(searchCondition);
if (value?.code === '0') {
setCampaignPackages(campaignPackages.concat(value.result));
}
};