簡體   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