将 JavaScript 迁移到 TypeScript
Migrating JavaScript to TypeScript
我正在尝试将以下 JavaScript 代码迁移到 TypeScript。
var DemoGroupStyle = yfiles.lang.Class('DemoGroupStyle',{
'$extends': yfiles.styles.NodeStyleBase,
'constructor': function() {
yfiles.styles.NodeStyleBase.call(this);
},
/**
* Backing field for below property
* @type {string}
*/
'$cssClass': "",
/**
* Gets or sets a custom css class that is assigned to the top level element representing the node.
* @type {string}
*/
'cssClass': {
'$meta': function() {
return [
yfiles.graphml.GraphMLAttribute().init({'defaultValue' : ""}),
yfiles.lang.TypeAttribute(yfiles.lang.String.$class)];
},
'get': function() {
return this.$cssClass;
},
'set': function(/**string*/ value) {
this.$cssClass = value;
}
},
我尝试了以下逻辑:
cssClass: string = "";
metacssClass() {
return [new yfiles.graphml.GraphMLAttribute().defaultValue = "", new yfiles.lang.TypeAttribute(yfiles.lang.String.$class)];
}
getcssClass() {return this.cssClass;};
setcssClass(value) {this.cssClass = value};
但是如果我想用它代替它就不起作用了。
你能告诉我为什么我的逻辑是错误的以及我该如何改变它吗?
如果您依赖于元数据的东西,恐怕您将无法真正将此 class 转换为原生 TypeScript class。如果您不需要元编程(“$meta”),那么您可以轻松地将其转换为 TypeScript,大致如下:
class DemoGroupStyle extends yfiles.styles.NodeStyleBase {
constructor() {
super();
}
private $cssClass : string;
get cssClass(): string {
return this.$cssClass;
}
set cssClass(cssClass: string) {
this.$cssClass = cssClass;
}
}
但是 $meta 内容不适用于 TypeScript:请参阅 Extending Framework Classes and the secion about attributes。
我的建议是保持这个 class 使用 JavaScript 语法(它可以很容易地在常规 TypeScript 代码中使用,并与原生 TypeScript 和 ES6 classes 完美共存)并且只转换不需要使用元属性的 classes。
我正在尝试将以下 JavaScript 代码迁移到 TypeScript。
var DemoGroupStyle = yfiles.lang.Class('DemoGroupStyle',{
'$extends': yfiles.styles.NodeStyleBase,
'constructor': function() {
yfiles.styles.NodeStyleBase.call(this);
},
/**
* Backing field for below property
* @type {string}
*/
'$cssClass': "",
/**
* Gets or sets a custom css class that is assigned to the top level element representing the node.
* @type {string}
*/
'cssClass': {
'$meta': function() {
return [
yfiles.graphml.GraphMLAttribute().init({'defaultValue' : ""}),
yfiles.lang.TypeAttribute(yfiles.lang.String.$class)];
},
'get': function() {
return this.$cssClass;
},
'set': function(/**string*/ value) {
this.$cssClass = value;
}
},
我尝试了以下逻辑:
cssClass: string = "";
metacssClass() {
return [new yfiles.graphml.GraphMLAttribute().defaultValue = "", new yfiles.lang.TypeAttribute(yfiles.lang.String.$class)];
}
getcssClass() {return this.cssClass;};
setcssClass(value) {this.cssClass = value};
但是如果我想用它代替它就不起作用了。
你能告诉我为什么我的逻辑是错误的以及我该如何改变它吗?
如果您依赖于元数据的东西,恐怕您将无法真正将此 class 转换为原生 TypeScript class。如果您不需要元编程(“$meta”),那么您可以轻松地将其转换为 TypeScript,大致如下:
class DemoGroupStyle extends yfiles.styles.NodeStyleBase {
constructor() {
super();
}
private $cssClass : string;
get cssClass(): string {
return this.$cssClass;
}
set cssClass(cssClass: string) {
this.$cssClass = cssClass;
}
}
但是 $meta 内容不适用于 TypeScript:请参阅 Extending Framework Classes and the secion about attributes。
我的建议是保持这个 class 使用 JavaScript 语法(它可以很容易地在常规 TypeScript 代码中使用,并与原生 TypeScript 和 ES6 classes 完美共存)并且只转换不需要使用元属性的 classes。