如何在 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
所需的所有属性,因此可以将其分配给该类型的变量。
我想弄清楚如何在 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
所需的所有属性,因此可以将其分配给该类型的变量。