如何使用非打字稿js框架的typescript?

时间:2016-02-02 15:33:31

标签: javascript typescript

我有一个Javascript工作流框架。

步骤将如此定义:

var enterSSNStep = function() {
  // some init code
};
$.extend(enterSSNStep.prototype, framework.step.prototype, {
  // declare functions for enterSSNStep here
});

有没有办法可以编写Typescript中的步骤并保留我目前使用$ .extend实现的继承系统?

2 个答案:

答案 0 :(得分:0)

您应该能够执行以下操作:

framework.d.ts

interface IStep {
    new(arg: any): IStep
    doSomething() : any;
}

interface IFramework {
    step : IStep;
}

declare var framework : IFramework;

EnterSSNStep.ts

/// <reference path="framework.d.ts"/>

class EnterSSNStep extends framework.step {

    constructor(arg) {
        // some init code
        super(arg);
    }

    public doSomethingElse() {
        this.doSomething();
    }
}

希望它有所帮助;)

答案 1 :(得分:0)

虽然您当然可以在TypeScript中编写类似的代码,但您可能会发现这样做会阻止编译器进行大量的类型推断或类型检查,因为它无法理解您的$.extend基于原型层次结构您需要使用$.extend是否有任何特殊原因?例如,以下TypeScript代码:

class enterSSNStep extends framework.step {
  constructor() {
    super();
    // init code
  }

  // functions for enterSSNStep
  doSomething() {
    // do stuff
  }
}

获取编译为以下ES5代码:

var enterSSNStep = (function (_super) {
  __extends(enterSSNStep, _super);
  function enterSSNStep() {
    _super.call(this);
    // init code
  }
  // functions for enterSSNStep
  enterSSNStep.prototype.doSomething = function () {
    // do stuff
  };
  return enterSSNStep;
})(framework.step);

请注意,我省略了上面__extends的定义(如果您需要做一些特殊的事情,或者使用TypeScript生成的标准版本,您可以提供自己的定义)。