非null断言缺少分号



我有这个功能,我可以根据坐标系订购一组卡片:

const orderCardsInPage = (items: OrderItemType[], pageCards: CardType[]) => {
return pageCards.sort((firstCard, secondCard) => {
const orderItemOfFirstCard = items.find((orderItem: OrderItemType) => orderItem.card === firstCard._id.toString());
const orderItemOfSecondCard = items.find((orderItem: OrderItemType) => orderItem.card === secondCard._id.toString());
const valueOfFirstOrderItem = orderItemOfFirstCard?.value;
const valueOfSecondOrderItem = orderItemOfSecondCard?.value;
return valueOfFirstOrderItem! - valueOfSecondOrderItem!;
});
};

但是,当我尝试编译时,return语句在非null断言符号(!)上抛出missing semicolon错误。

我知道array.find()函数可能会返回一个未定义的,这就是为什么我有非null断言的原因。我该怎么解决这个问题?

我无法重现错误,但您可以做的是确保定义了值,这样就不需要非null断言。

const orderCardsInPage = (items: { value: number }[], pageCards: { _id: number }[]) => {
return pageCards.sort((firstCard, secondCard) => {
const orderItemOfFirstCard = items.find((orderItem: any) => orderItem.card === firstCard._id.toString());
const orderItemOfSecondCard = items.find((orderItem: any) => orderItem.card === secondCard._id.toString());
const valueOfFirstOrderItem = orderItemOfFirstCard?.value;
const valueOfSecondOrderItem = orderItemOfSecondCard?.value;
// for example throw if not found
if (!valueOfFirstOrderItem || !valueOfSecondOrderItem) throw new Error("No item found");
return valueOfFirstOrderItem - valueOfSecondOrderItem;
});
};

顺便说一句,我假设了类型,如果value道具不是可选的,你可以更早地检查

const orderCardsInPage = (items: { value: number }[], pageCards: { _id: number }[]) => {
return pageCards.sort((firstCard, secondCard) => {
const orderItemOfFirstCard = items.find((orderItem: any) => orderItem.card === firstCard._id.toString());
const orderItemOfSecondCard = items.find((orderItem: any) => orderItem.card === secondCard._id.toString());
if (!orderItemOfFirstCard || !orderItemOfSecondCard) throw new Error("No item found");
return orderItemOfFirstCard.value - orderItemOfSecondCard.value;
});
};

最新更新