如何在Typescript中获得接口的单个实例
我试图弄清楚如何在Typescript中获得接口的单个实例。我有以下有效的代码:如何在Typescript中获得接口的单个实例,typescript,interface,instantiation,Typescript,Interface,Instantiation,我试图弄清楚如何在Typescript中获得接口的单个实例。我有以下有效的代码: export interface IOpenStatus { filePath: string; openSuccess: boolean; error: string; fileData: string; } openStatus: IOpenStatus[]; 但是,如果我只想定义接口的一个实例,则此将失败: openStatus: IOpenStatus; 这也失败了:
export interface IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
openStatus: IOpenStatus[];
但是,如果我只想定义接口的一个实例,则此将失败:
openStatus: IOpenStatus;
这也失败了:
let openStatus= new IOpenStatus();
似乎数组“[]”以某种方式替代了实例创建机制(尽管是多个实例)。在我的情况下,我从来不想实例化多个接口实例
如何实例化接口的单个实例?我需要使用一个接口,因为我要用这个接口从服务器返回这个数据
更新
我可以看出部分问题是我没有指定上下文。我在Angular2应用程序中这样做。在我的情况下,我使用
openStatus:IOpenStatus[]代码>
作为类属性定义的一部分(确切地说是组件)。似乎数组表示法只允许Javascript预测接口类型的数组的实例化,而无需任何进一步的定义(它可以在之后立即用作这样的数组)
我必须做的是,最终利用:
userOpenStatus=newopenstatus()代码>
是在类中实现接口,例如:
export interface IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
export class OpenStatus implements IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
鉴于:
这本身就是一个语法错误:
openStatus: IOpenStatus[];
(尽管它作为类属性声明是有效的。)您可能需要以下内容:
let openStatus: IOpenStatus[];
这与纯JS版本完全对应:
let openStatus;
唯一的区别是类型注释。如果您不希望它是您的类型的数组,只需说:
let openStatus: IOpenStatus;
为了出现在new
关键字之后,标识符必须是构造函数的名称,声明其中一个构造函数的最简单方法是使用class
关键字。但您可以使用类型文字:
openStatus = {
filePath: "/blah",
openSuccess: true,
error: "",
fileData: "Hello, world."
};
它具有IOpenStatus
所需的所有属性,因此可以将其分配给该类型的变量。不能实例化接口。它们的存在是为了有一个没有实现的契约,因此实例化与它们存在的全部原因背道而驰
是否实现了一个接口数组?IOpenStatus[]
只是声明openStatus
以最终包含一个IOpenStatus
数组,它没有实现或实例化任何内容。如果您在问题中确切说明发生了什么,而不是“它失败了”,您可能会得到更多帮助。它是如何失败的?编译时错误?错误信息是什么?还是运行时问题?再说一遍,什么错误消息?
openStatus = {
filePath: "/blah",
openSuccess: true,
error: "",
fileData: "Hello, world."
};