TypeScript代码编写问题

function reverseList(head: ListNode): ListNode {
    let previous: ListNode | null = null;
    let current: ListNode | null = head;
    while(current !== null) {
        const nextNode: ListNode = current.next;
        current.next = previous;
        previous = current;
        current = nextNode;
    }
    return previous;
}

这段代码中,previous初始态为nullcurrent初始态为ListNode,必定会进入循环;
循环执行之后,current最终态为nullprevious最终态为ListNode。即返回值必然是ListNode类型

然而TypeScript会按照变量的类型声明进行检查,得出结论返回值应该为ListNode | null,如果增加null,那么需要对函数调用结果做不必要的类型检查。

求助应该如何修正这段TypeScript代码?

阅读 2.5k
5 个回答

居然只能采纳一个答案,其实可以有两种思路。

首先previous=null针对的是空链表和单结点链表。

如果反转函数支持空链表,参数headListNode | null,那么整个逻辑最终返回ListNode | null是合理的。完善这段代码的方式是更改函数参数类型。

如果反转函数不支持空链表,那么就有了现在这个矛盾点,完善这段代码有两种方式:

  • 单独考虑单结点链表,直接返回headprevious的指向从head开始
  • 人为控制,做强制类型转换。

因为的previous类型签名为ListNode | null,如果你能保证返回值类型的化,你可以在返回那里做个强制类型转换,return <ListNode>previousreturn previous as ListNode

反转代码没有考虑 head 为 null

如果你能保证运行时变量不会为 null,那可以在后面加一个 "!" 表示我断言此处它不会为 null,typescript 就会自动排除类型中的空值。

 return previous!;

不用 null 初始化,new 一个空的 ListNode 作为初始值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏