我正在尝试实现二叉搜索树(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 中的泛型实现类似的东西。以下是我面临的问题,需要帮助/建议:
与 Java 不同,JS 原始类型没有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>接口的类型。
翻过高山走不出你
相关分类