跨项目共享原始类型的自定义方法的打字稿

我正在尝试实现二叉搜索树(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>接口的类型。


冉冉说
浏览 120回答 1
1回答

翻过高山走不出你

除非包含文件是 ES6 模块,否则该声明应该有效,在这种情况下,您必须declare global { ... }绕过接口声明。如果它不起作用,你得到了什么错误?最好的办法可能是让构造函数BST接受一个 type 的比较器(x: T, y: T) => number。然后调用者可以根据需要使用带有比较器的原始类型而不是标准排序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java