我创建了一个简单的界面
module Modules.Part
{
export interface IPart
{
PartId: number;
partNumber: string;
description: string;
}
}
然后我在另一个接口
中声明了这个接口module Interfaces.Scopes {
export interface IPartScope extends ng.IScope {
part: Modules.Part.IPart;
vm: Controllers.PartCtrl;
}
}
我在班上使用这个界面
module Controllers
{
export class PartCtrl
{
constructor(public scope:Interfaces.Scopes.IPartScope)
{
scope.part.PartId = 1;
scope.part.partNumber = "123part";
scope.part.description = "description";
}
}
}
当我要在我的班级设置IPart界面的属性时,它会给我以下错误
TypeError: Cannot set property 'PartId' of undefined
请让我知道如何解决这个问题
答案 0 :(得分:0)
我要说,首先需要初始化part
属性的PartCtrl.scope
属性(通过构造函数隐式定义):
constructor(public scope:Interfaces.Scopes.IPartScope)
{
scope.part = [initializer];
scope.part.PartId = 1;
scope.part.partNumber = "123part";
scope.part.description = "description";
}
由于scope.part
是接口类型IPart
,因此您无法创建它的实例,而是必须以某种方式解析它。例如:
export interface IActivator<T> {
new (): T;
}
export class PartCtrl<TPart extends IPart>
{
constructor(public scope:Interfaces.Scopes.IPartScope,
activator: IActivator<TPart>)
{
scope.part = new activator();
// ...
}
}
现在您可以通过以下方式使用PartCtrl<TPart>
:
export class ConcretePart implements IPart
{
public PartId: number;
public partNumber: string;
public description: string;
}
var ctrl = new PartCtrl(ConcretePart);
希望这有帮助。
答案 1 :(得分:0)
您可以使用匿名对象初始化属性“part”。
scope.part =
{
PartId = 1;
partNumber = "123part";
description = "description";
}
当然,您也可以定义一个实现IPart并实例化它的类。