繁体   English   中英

无法在TypeScript中设置Interface的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM