我有一个Javascript工作流框架。
步骤将如此定义:
var enterSSNStep = function() {
// some init code
};
$.extend(enterSSNStep.prototype, framework.step.prototype, {
// declare functions for enterSSNStep here
});
有没有办法可以编写Typescript中的步骤并保留我目前使用$ .extend实现的继承系统?
答案 0 :(得分:0)
您应该能够执行以下操作:
interface IStep {
new(arg: any): IStep
doSomething() : any;
}
interface IFramework {
step : IStep;
}
declare var framework : IFramework;
/// <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生成的标准版本,您可以提供自己的定义)。