下面,如果我导入Entity
,则会得到帖子的主题错误(TypeError:Object原型可能只是一个Object或null:未定义),但是如果我将导入替换为实际的Entity
声明,代码运行正常。
这是Customer.ts
的形式,当我使用ts-node
运行代码时会产生错误:
index.ts
export { Customer } from "./Customer";
export { Entity } from "./Entity";
Customer.ts
import { Entity } from "./index";
export class Customer extends Entity {
sku: string;
constructor(po: any) {
super();
this.sku = po.sku;
}
}
Entity.ts
export abstract class Entity {
id?: string;
}
Run.ts(测试代码)
import {Customer} from "./";
let c = new Customer({
name: "Bob"
});
console.log(c);
如果我将Entity
导入替换为这样的声明:
export abstract class Entity {
id?: string;
}
export class Customer extends Entity {
sku: string;
constructor(po: any) {
super();
this.sku = po.sku;
}
}
然后Run.ts
记录以下内容:
Customer { sku: undefined }
换句话说,它运行正常并且不产生错误。有想法吗?
答案 0 :(得分:3)
我怀疑您的原始程序具有循环导入。 Run.ts
导入index.ts
,后者又导入Customer.ts
,后者又再次导入index.ts
。由于index.ts
已经在加载过程中,并且它本身依赖于Customer.ts
,因此import { Entity } from "./index";
仅绑定Entity
的{{1}}(尚未设置)到index.ts
的{{1}}中,即使Entity
尚未完成加载,执行仍会继续。然后在尝试扩展Customer.ts
时未定义。您可能会认为循环导入应该是错误的,或者JavaScript引擎应该使用其他可以正确处理您的情况的算法;我没有资格评论为什么选择当前设计。 (其他人可以随意添加有关此信息。)
如您所见,将index.ts
更改为直接从Entity
而不是Customer.ts
导入会破坏周期,并且一切都会按预期进行。另一个解决方案是颠倒./Entity
中的导入顺序。
答案 1 :(得分:-4)
您可以尝试使用此命令并检查应用程序:
ng update @angular/cli @angular/core --force
npm install
ng serve -o