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