gpt4 book ai didi

javascript - Typescript 跨项目共享原始类型的自定义方法

转载 作者:行者123 更新时间:2023-11-30 20:13:51 26 4
gpt4 key购买 nike

我正在尝试实现二叉搜索树 ( 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 中的泛型实现类似的功能。以下是我遇到的问题,需要帮助/建议:

  1. 与 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;

我的第一个问题是如何在整个项目中共享这个新的原型(prototype)方法?

  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> 的类型 界面。

最佳答案

  1. 该声明应该有效,除非包含文件是 ES6 模块,在这种情况下,您必须将 declare global { ... } 放在接口(interface)声明周围。如果它不起作用,您遇到了什么错误?
  2. 最好的办法可能是让 BST 的构造函数采用 (x: T, y: T) => number 类型的比较器。然后,如果他们愿意,调用者可以使用带有比较器的原始类型而不是标准排序。

关于javascript - Typescript 跨项目共享原始类型的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com