每当我尝试从我的域模型中实例化一个新对象时,使用TypeScript的My Angular 2(RC)应用程序都会中断错误:
错误:TypeError:无法读取属性' prototype'未定义的(...)
export class Reservation {
public ReservationId: number;
public SeatingId: number;
public EventId: number;
// ...
constructor() {}
}
然后在我的组件中使用:
import { Reservation } from '../models/models';
....
let booking = new Reservation();
这个和其他模型对象由http服务实例化而没有问题,作为参数传递,并且通常在整个应用程序中使用 - 所有这些都没有问题,但是我添加" new Reservation()"在应用程序中的任何地方我收到此错误。
我已经看过很多使用这种语法的例子,我也试图创建一个可注入的工厂服务来返回新对象,以及我能想到的其他方式,但无论在哪里我的应用程序我添加此行它在bootstrap期间中断。在构建期间没有显示TypeScript错误或任何内容。
更新: 似乎问题只发生在从另一个文件导入的类中。我创建了一个虚拟示例,当该类与我的组件在同一个文件中时,它可以工作,但如果该类是从另一个文件导入的,那么它就没有了,即它可以工作:
import { Component, OnInit } from '@angular/core';
//import { Foo } from '../models/models';
export class Foo {
public Name: string;
public Score: number;
}
@Component({
selector: 'foo',
template: `
<h1>{{bar.Name}}</h1>
`,
directives: []
})
export class FooComponent implements OnInit {
bar : Foo;
constructor() { }
ngOnInit() {
this.bar = new Foo();
this.bar.Name = "Foobar";
}
}
这不是:
import { Component, OnInit } from '@angular/core';
import { Foo } from '../models/models';
@Component({
selector: 'foo',
template: `
<h1>{{bar.Name}}</h1>
`,
directives: []
})
export class FooComponent implements OnInit {
bar : Foo;
constructor() { }
ngOnInit() {
this.bar = new Foo();
this.bar.Name = "Foobar";
}
}
在这两种情况下,Foo类都是相同的。文件的路径也是正确的。我的编辑器是VS Code,没有构建错误或解析导入的类,或者以新Foo()之外的任何其他方式使用类;
更新2:
我发现我的ts文件中的import语句没有转换为相应编译的js文件中的require语句,因此编译为models.js的我的models.ts不会被浏览器加载,我和#39;猜测可以解释为什么我不能实例化其中包含的任何类。
更新3:
上次更新可能是红鲱鱼。如果我尝试注入我想在组件构造函数中使用的类,则在js文件中根据需要添加models.js并由浏览器加载,但是会发生完全相同的错误。
答案 0 :(得分:0)
我有类似的问题。我解决它的方法是将默认值设置为变量。
export class Reservation {
public ReservationId: number = null;
public SeatingId: number = null;
public EventId: number = null;
// ...
constructor() {}
}