Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript跨项目共享基元类型上的自定义方法_Javascript_Java_Typescript - Fatal编程技术网

Javascript Typescript跨项目共享基元类型上的自定义方法

Javascript Typescript跨项目共享基元类型上的自定义方法,javascript,java,typescript,Javascript,Java,Typescript,我正在尝试实现一个二进制搜索树() 对于insert(data:T)、find(data:T)和remove(data:T)等操作,我在Java中看到了一些具有以下特征的示例: 类BST 除非包含的文件是ES6模块,否则该声明应该有效,在这种情况下,您必须在接口声明周围放置declare global{…}。如果它不起作用,你会得到什么错误 最好的方法可能是让BST的构造函数获取(x:T,y:T)=>number类型的比较器。然后,如果调用方愿意,可以使用带有比较器的基元类型,而不是标准排序 谢

我正在尝试实现一个二进制搜索树()

对于
insert(data:T)
find(data:T)
remove(data:T)
等操作,我在Java中看到了一些具有以下特征的示例:

类BST
  • 除非包含的文件是ES6模块,否则该声明应该有效,在这种情况下,您必须在接口声明周围放置
    declare global{…}
    。如果它不起作用,你会得到什么错误
  • 最好的方法可能是让
    BST
    的构造函数获取
    (x:T,y:T)=>number
    类型的比较器。然后,如果调用方愿意,可以使用带有比较器的基元类型,而不是标准排序

  • 谢谢你,马特。我没有把“申报全球”。构造函数方法也应该有效。我将尝试这两种方法,并让您知道:)再次感谢!马特:当我在文件中简单地添加
    声明全局
    时,我得到了以下错误:
    [ts]全局范围的扩展只能直接嵌套在外部模块或环境模块声明中。
    。文件名或它的位置到底应该是重要的吗?很抱歉,我认为我写错了,这是有效的:
    declare interface Number{compareTo(numObj:Number):-1 | 0 | 1;
    Aha!在运行时,
    ts节点
    不会预先执行所有文件;它只执行主文件,然后从那里执行
    require
    import
    。因此,假设您的数字扩展名在
    global.ts
    中,您必须使用
    require(“/global”)
    import./global”;
    强制
    ts节点执行文件(后者即使
    global.ts
    不是ES6模块也有效)您可以编写类似于
    类BST
    的代码,但这种方法并不理想,因为可能很难以生成所需顺序的方式将自定义对象转换为数字。我仍然建议使用自定义比较器方法。
    class Person implements Comparable<Person> {
      private String name;
      private Integer age;
      ///...
      ///..
      @override
      int compareTo(Person otherObj) {
        // return 0 | -1 | 1;
      }
    }
    
    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;