我试图弄清楚如何在Typescript中获取一个接口的单个实例。我有以下代码可用:
export interface IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
openStatus: IOpenStatus[];
但是,如果我只想定义一个接口实例,那么会失败:
openStatus: IOpenStatus;
这也失败了:
let openStatus= new IOpenStatus();
似乎数组“[]”以某种方式替代了实例创建机制(尽管是多个实例)。在我的情况下,我从不想要实例化多个接口的实例。
如何实例化接口的单个实例?我需要使用接口,因为我将使用相同的接口从服务器返回此数据。
更新 我可以看到部分问题是我没有指定上下文。我在Angular2应用程序中这样做。在我的情况下,我正在使用
openStatus: IOpenStatus[];
作为类属性定义的一部分(确切地说是一个组件)。似乎数组表示法只是允许Javascript预测接口类型数组的实例化而无需任何进一步的定义(它可以立即用作此类数组)。
我必须做什么,最终要利用:
userOpenStatus = new OpenStatus();
是在类中实现接口,例如:
export interface IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
export class OpenStatus implements IOpenStatus {
filePath: string;
openSuccess: boolean;
error: string;
fileData: string;
}
答案 0 :(得分:2)
假设:
export interface 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
所需的所有属性,因此可以将其分配给该类型的变量。