[英]Cannot set property of Interface in TypeScript
我已经创建了一个简单的界面
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
请让我知道如何解决这个问题
我说,你首先需要初始化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);
希望这可以帮助。
您可以使用匿名对象初始化属性“ part”。
scope.part =
{
PartId = 1;
partNumber = "123part";
description = "description";
}
当然,您也可以定义一个实现IPart并将其实例化的类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.