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

How Do I get a single instance of an interface in Typescript

我想弄清楚如何在 Typescript 中获取接口的单个​​实例。我有以下有效的代码:

export interface IOpenStatus {
    filePath: string;
    openSuccess: boolean;
    error: string;
    fileData: string;
}

openStatus: IOpenStatus[];

但是,如果我只想定义接口的单个​​实例,则此 失败 :

openStatus: IOpenStatus;

这也失败了:

let openStatus= new IOpenStatus();

数组“[]”似乎以某种方式替代了实例创建机制(尽管是多个实例)。在我的情况下,我不想实例化多个接口实例。

如何实例化接口的单个​​实例?我需要使用一个接口,因为我要 return 使用相同接口从服务器获取此数据。

更新 我可以看到部分问题是我没有指定上下文。我在 Angular2 应用程序中这样做。在我的情况下,我使用

openStatus: IOpenStatus[];

作为 class 属性 定义的一部分(确切地说是一个组件)。似乎数组符号确实允许 Javascript 预期接口类型数组的实例化而无需任何进一步定义(它可以用作此类数组,此后立即)。

我要做的,到底要利用:

userOpenStatus = new OpenStatus();

就是实现一个class中的接口如:

export interface IOpenStatus {
    filePath: string;
    openSuccess: boolean;
    error: string;
    fileData: string;
}

export class OpenStatus implements IOpenStatus {
    filePath: string;
    openSuccess: boolean;
    error: string;
    fileData: string;
}

鉴于:

export interface IOpenStatus {
    filePath: string;
    openSuccess: boolean;
    error: string;
    fileData: string;
}

这本身就是一个语法错误:

openStatus: IOpenStatus[];

(虽然它作为 class 属性 声明是有效的。)您可能需要像这样的东西:

let openStatus: IOpenStatus[];

这与纯 JS 版本完全对应:

let openStatus;

唯一的区别是类型注释。如果您不希望它成为您类型的数组,只需说:

let openStatus: IOpenStatus;

为了出现在 new 关键字之后,标识符必须是构造函数的名称,声明其中一个的最简单方法是使用 class 关键字。但是你可以只使用类型文字:

openStatus = {
    filePath: "/blah",
    openSuccess: true,
    error: "",
    fileData: "Hello, world."
};

它具有 IOpenStatus 所需的所有属性,因此可以将其分配给该类型的变量。