尝试基于JavaScrip演示实现Typescript代码

时间:2018-07-25 11:21:27

标签: javascript typescript

我正在使用Javascript中提供的演示代码。基于此演示,我正在尝试为应用程序实现类似的算法(但在TypeScript中)。不幸的是,我不确定如何将其写入TypeScript以得到相同的结果。 (如果您的答案是“ TypeScript是JavaScript的超集。将文件扩展名更改为.ts并通过TypeScript编译器运行,它将起作用。”或类似的方法,请不要打扰。我已经尝试过了,它不起作用。)

因此,让我们详细了解一下:

由于演示是专有代码,所以我更改了类,函数和变量的名称,并且未显示方法的内容。

在演示代码中,有一个JavaScript文件,名为ExampleClass.js:

 'use strict'

define(['demo/basics'],  demo => {

 const cons1 = Symbol('cons1')


 const cons2 = Symbol('cons2')

 class ExampleClass extends ExtendedClass {

 exampleMethod(param) {
  //content of a method
 }

  return {
   cons1,
   cons2,
   ExampleClass
  }

})

ExampleClass以这种方式在另一个类中被引用

require(['./ExampleClass'], (DemoClass) => {

    // some code
    //...
    let variable = new DemoClass.ExampleClass;
    //...
    //some other class

})

require(['./ExampleClass'], (DemoClass) => {

    // some code
    //...
    let variable = new DemoClass.ExampleClass;
    //...
    //some code again

})

在我的源代码中,我需要相同的逻辑。但是因为我的软件代码在TypeScript中,所以我需要将其写入TypeScript。我的尝试如下:

   'use strict';


export class ExampleClass extends ExtendedClass {

get CONS1(): symbol {
    return this._cons1;
}

get CONS2(): symbol {
    return this._cons2;
}

private _cons1 = Symbol('cons1');
private _cons2 = Symbol('cons2');


       exampleMethod(param) {
        //content of a method
    }
}

然后在另一个类中对其进行引用:

      import {ExampleClass} from './ExampleClass';


     export class TheOTherClass implements ClassToImplement {
     // some code
     //...
     let variable = new ExampleClass();
     //...
     //some code again
} 

在浏览器中,我使用开发人员工具调试代码(Demo和我的代码)。如果将光标(或您可以使用“监视”功能)放在“变量”上,则可以看到其内容的“文本描述”。不幸的是,我得到了不同的值。

演示中对“变量”的描述如下:

 $f23: constructor {$f23: constructor, $f: 3}
 $nM: constructor
 proertyOfSuperClass: constructor
 _proto_: constructor

我的TypeScript文件中“变量”的描述如下:

 $Vk: null
 $f23: null
 CONS1: Symbol('cons1')
 CONS2: Symbol('cons2')
 proertyOfSuperClass: null
 _cons1: Symbol('cons1')
 _cons2: Symbol('cons2')
 _proto_: constructor

显然是另一个值。我真的不明白为什么构造函数'$ f23','$ Vk'和Extended类的属性为'null'。

这表明可能的原因可能是在JavaScript中它具有以下块:

 return {
          cons1,
          cons2,
          ExampleClass
  }

我试图在TypeScript中实现类似的功能,并使用returnClass函数扩展了代码:

           'use strict';


export class ExampleClass extends ExtendedClass {

get CONS1(): symbol {
    return this._cons1;
}

get CONS2(): symbol {
    return this._cons2;
}

private _cons1 = Symbol('cons1');
private _cons2 = Symbol('cons2');


       exampleMethod(param) {
        //content of a method
    }

     **returnClass() {**

    **let r1 = new ExampleClass().CONS1;
    let r2 = new LayoutCoordinatesStage().CONS2**


    **return {
        r1,
        r2,
        ExampleClass,

    }**
}

}

然后,在另一个类中调用它时:

 let variable = new ExampleClass().returnClass;

不幸的是,它也不起作用。关于如何在TypeScript中具有逻辑上相同的类的任何想法?

0 个答案:

没有答案