我正在嘗試實現(xiàn)二叉搜索樹(Github repo)。對于insert(data: T),find(data: T)和等操作remove(data: T),我在 Java 中看到了一些具有以下簽名的示例:class BST<T extends Comparable<? super T>> { ... }我相信有了這個簽名,它可以讓我們創(chuàng)建一個包含對象的 BST 作為Node. 像這樣的東西:class Person implements Comparable<Person> { private String name; private Integer age; ///... ///.. @override int compareTo(Person otherObj) { // return 0 | -1 | 1; }}我想通過 TypeScript 中的泛型實現(xiàn)類似的東西。以下是我面臨的問題,需要幫助/建議:與 Java 不同,JS 原始類型沒有compareTo方法 - 因此我的問題是 - 如何向原始類型添加方法并在整個項目中共享該定義。與創(chuàng)建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;我的第一個問題是如何在整個項目中共享這種新的原型方法?替代方案有人可以提出一些替代方案,以某種方式為所有類型的數(shù)據(jù)構(gòu)建通用二叉搜索樹。class BST <T | T extends Comparable<T>> implements Tree<T> {...}但這給了我編譯錯誤,說Comparable is being used as a value when it is only a _type_除其他語法錯誤外。我的想法是:T應(yīng)該是原始類型,或者應(yīng)該是實現(xiàn)Comparable<T>接口的類型。
1 回答

翻過高山走不出你
TA貢獻1875條經(jīng)驗 獲得超3個贊
除非包含文件是 ES6 模塊,否則該聲明應(yīng)該有效,在這種情況下,您必須
declare global { ... }
繞過接口聲明。如果它不起作用,你得到了什么錯誤?最好的辦法可能是讓構(gòu)造函數(shù)
BST
接受一個 type 的比較器(x: T, y: T) => number
。然后調(diào)用者可以根據(jù)需要使用帶有比較器的原始類型而不是標準排序。
添加回答
舉報
0/150
提交
取消