我正在尝试创建一个基本控制器来使用类型记录/角来访问表单信息,我的问题是form成员似乎被编译掉了--也就是说,它并不存在于结果的JavaScript中。
我哪里出问题了?
这是我的代码:
export class FormController {
form: ng.IFormController;
constructor() {
}
showValidation(fieldName: string, errorType: string): boolean {
var field = this.form[fieldName];
var fieldError = typeof errorType === 'undefined' ? field.$invalid : field.$error[errorType];
return !field.$pristine && fieldError;
}
}}
export class ImplController extends FormController {
constructor(private $state: ng.ui.IStateService) {
super();
}
public validateField(): boolean {
return this.showValidation('field-name', 'invalid');
}
}得到的JS如下所示:
var FormController = (function () {
function FormController() {
}
FormController.prototype.showValidation = function (fieldName, errorType) {
...
};
return FormController;
}());发布于 2016-08-12 00:35:15
在构造函数之外声明的属性仅仅是一个TypeScript构造,并且在JavaScript的语言规范中不存在--它们的设计纯粹是为了让TypeScript更好地理解类的属性。
为了进一步演示这一点,如果要使用以下TypeScript:
class TestClass {
myString: string = "Hello";
constructor(){}
}然后在TypeScript编译器中运行它,目标是ES6而不是5,如下所示:
class Tester {
constructor() {
this.myString = "Hello";
}
}但是,如果您不给变量赋值,TypeScript编译器将删除它:
class TestClass {
myString: string;
constructor(){}
}转到这一点:
class TestClass {
constructor(){}
}更新
除了您的注释之外,您得到错误的原因是您没有为您的属性赋值--因此TypeScript编译器将删除它。如果要给它分配一个结构上相同的IFormController的值,那么它就不会出错。
https://stackoverflow.com/questions/38908071
复制相似问题