如何在Typescript中获取单个接口实例

时间:2016-09-02 17:30:39

标签: typescript interface instantiation

我试图弄清楚如何在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;
}

1 个答案:

答案 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所需的所有属性,因此可以将其分配给该类型的变量。