我正在尝试实现二进制搜索树(Github repo)。
对于insert(data: T)
,find(data: T)
和remove(data: T)
之类的操作,我在Java中看到了一些具有以下签名的示例:
class BST<T extends Comparable<? super T>> { ... }
我相信通过此签名,我们也可以创建由对象组成的BST,作为 Node
。像这样:
class Person implements Comparable<Person> {
private String name;
private Integer age;
///...
///..
@override
int compareTo(Person otherObj) {
// return 0 | -1 | 1;
}
}
我想通过TypeScript中的泛型实现类似的功能。这是我面临的问题,需要以下方面的帮助/建议:
compareTo
方法-因此,我的问题是-如何向基本类型添加方法并在整个项目中共享该定义。创建 namespace
是什么?interface Number { compareTo(o: number): number; } Number.prototype.compareTo = function(o: number) { // add checks for corner cases return this > o ? 1 : this < o ? -1 : o; } let a = 2; let b = 3; a.compareTo(b); // -1;
我的第一个问题是如何在整个项目中共享这种新的原型方法?
class BST <T | T extends Comparable<T>> implements Tree<T> {...}
但这给了我编译错误,其中说Comparable is being used as a value when it is only a _type_
和其他语法错误。
我的想法是: T
应该是原始类型,或者应该是实现 Comparable<T>
接口的类型。
答案 0 :(得分:1)
declare global { ... }
。如果不起作用,您会遇到什么错误?BST
的构造函数采用(x: T, y: T) => number
类型的比较器。然后,如果愿意,调用者可以将原始类型与标准顺序以外的其他比较器一起使用。