Миграция JavaScript в TypeScript - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь перенести следующий код 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};

но он не работает, если я хочу использовать его вместо него.

Подскажите, пожалуйста, почему моя логика неверна и как я могу ее изменить?

1 Ответ

0 голосов
/ 05 июля 2018

Если вы зависите от метаданных, то, боюсь, вы не сможете по-настоящему преобразовать этот класс в собственный класс TypeScript. Если вам не требуется метапрограммирование ("$ 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: см. Расширение классов Framework и раздел об атрибутах .

Я предлагаю сохранить этот класс в том виде, в котором он использует синтаксис JavaScript (его можно легко использовать в обычном коде TypeScript и прекрасно сосуществовать с нативными классами TypeScript и ES6) и преобразовывать только те классы, которые не требуют использования мета-атрибутов. .

...