将 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。