【发布时间】:2022-01-18 20:51:42
【问题描述】:
作为标题。我是 TS 的新手,正在学习它。我将提供一个例子来描述我被卡住的地方。下面代码的错误是:
Type 'undefined' is not assignable to type 'number'.
所以 TS 没有上下文知识:它不知道 NumberQueue 的 push 会限制可以进入队列的内容。
// 11. Generics
//
class Queue {
private data = [];
push(item) { this.data.push(item); }
pop() { return this.data.shift(); }
}
class NumberQueue extends Queue {
push(item: number) { super.push(item); }
pop2(): number { return super.pop(); } // I'm concerning the TS Error (as above) on this line.
}
如何更改代码以绕过此错误?鉴于我(假设是)比 TS 知识渊博。另一个小问题是是否可以将pop2 更改为pop 而不会出现TS 错误?
【问题讨论】:
-
您说您的
pop2方法返回了number,但您实际上返回了Array.prototype.shift的结果,即undefined,因为调用了Array<never> -
我会使用泛型;将其更改为
Queue<T>,以及data: T[]、push(item: T)和pop(): T。然后NumberQueue可以扩展Queue<number>。我不确定为什么pop在基类中转移并在后代中弹出。看起来很奇怪。 -
@GuerricP:虽然我也写过
push(...)现在接受number类型的一个。
标签: typescript typescript-typings