push() 和 pop() 中返回值报错

来源:2-15 泛型第三部分 - 泛型在类和接口中的使用

慕莱坞3345942

2022-06-17

老师你好,今天实践课堂代码时出现问题
图片描述此处 item 报错,尝试显式声明 data 后不再报错,但 pop()中仍存在报错
图片描述不知道是哪里的问题呢?该怎么解决呢

写回答

2回答

张轩

2022-06-17

同学你好

请问你的 ts 是什么版本的? 看起来是更新的更强推断的版本,我在本地没发复现.

猜测一下解决方法,因为 shift 方法确实有可能返回为 undefined(当数组为空的时候),所以后面直接调用 toFixed 是有可能报错的,需要更多的约束

// 把 pop 返回的类型去掉,让自动推论推断返回的类型:应该是  T 或者 undefined
pop() {
    return this.data.shift()
}

//  这一行简单修改一下,修改为下面
console.log(queue.pop().toFixed())
// 先拿出值来,应该是 number | undefined 类型
const popedValue = queue.pop()
if (popedValue) {
    // 有值的时候再调用对应的方法
    console.log(popedValue.toFixed())
}


2
1
慕莱坞3345942
非常感谢!
2022-06-21
共1条回复

tzone

2023-10-21

// 泛型在类和接口中的应用
class Queue<T> {
private data: any[] = [];

push(item: T){
return this.data.push(item)
}

pop(): T {
return this.data.shift()
}

}

const queue = new Queue<number>()

queue.push(1)

上述代码可以

tsc -v : Version 5.2.2

node -v

v20.3.0


0
0

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程