我正在使用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中具有逻辑上相同的类的任何想法?