当前位置: 首页 > 知识库问答 >
问题:

从Typescript接口用空键值初始化对象

鲜于裕
2023-03-14

我希望从typescript接口创建一个对象,该接口将存储初始空值:

// Interface I'm looking to mock
interface IMyInterface {
  name: string;
  posts: string[];
}

在这个接口中,我需要根据接口键和类型用初始值初始化一个对象,类似于:

const initObjFromInterface = (interface: any) => {
  // do something
  return initObject;
}

const initializedObj = initObjFromInterface(IMyInterface);

请注意,我不知道作为参数传递给initObjFromInterface函数的接口的键!

initObjFromInterface函数的返回值应为:

console.log(initializedObj);

/* should output:
{
  name: "",  // empty string
  posts: []  // empty array
}
*/

共有1个答案

刘昌翰
2023-03-14

你不能像评论中说的那样做。

您必须在某个地方存储空对象的实例。

const emptyObject: IMyInterface = {
  name: '',
  posts: []
}

并传递一些唯一的值给函数,这样它就可以确定要获取接口的哪个空对象。

const initObjFromInterface = <T>(interfaceName: string) => {
  if(interfaceName === "IMyInterface") {
    return emptyObject as any as T;
  }

  return {} as T;
}

我相信上面的代码可以设计得更好(也许是类型保护和类型推断)

 类似资料:
  • 问题内容: 在当前的问题中(我将文件打印到Java中的物理打印机),我一直在疯狂地遍历代码,试图从所使用的每个类的javadoc中吞噬所有有用的丢失信息。 现在,我从以前的问题中抽出了很多代码,所以有相当一部分我不是自己写的。我注意到的问题是,我抓取的代码正在初始化一个对象,例如实现接口(Doc)的“SimpleDoc”并将其分配给该接口? 小代码段: 现在,据我所知,我们创建了对象。我熟悉继承,

  • 说明 用于初始化接口类型、协议,验证接口密钥 请求地址 http://api.dc78.cn/Api/sys_init 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 protocal 接口协议类型 否 用于声明接口使用的协议类型 mqtt type 客户端接口 否 用于说明客户端接口的类型 api 接口协议目前支持两种:mqtt、http。设置相应类型后,平台端将以此协议与客户端进

  • 问题内容: 我从AJAX调用REST服务器收到一个JSON对象。该对象具有与我的TypeScript类匹配的属性名称 初始化它的最佳方法是什么?我认为这行不通,因为类(和JSON对象)具有作为对象列表的成员和作为类的成员,而这些类具有作为列表和/或类的成员。 但是我更喜欢一种查找成员名称并在其间进行分配,创建列表并根据需要实例化类的方法,因此,我不必为每个类中的每个成员编写明确的代码(有很多!)

  • 问题内容: 当我试图写这样的东西: 编译器无法编译它。 但是当我写这样的东西时: 并反编译后,我看到了静态初始化: 您能否向我解释这种行为? 问题答案: 您可以具有静态初始化,但不能具有静态块。静态初始化需要静态代码块来实现的事实确实改变了Java语法。 关键是您不打算在接口中包含代码(在Java 8之前),但是可以初始化字段。 顺便说一句,您可以拥有一个嵌套的类或枚举,该类或枚举具有您想要的尽可

  • null 必需的 获取java对象(根元素),它完全表示xml和每个由默认值初始化的成员。 当我试图在不显式设置值的情况下marshall xml时,默认值并不能使sence...有什么方法可以在不自定义生成的类的情况下,用默认值填充xml吗? .xsd的示例: 和java类:

  • 我需要初始化“gDetailDS”对象的初始值。我不能创建类而不是接口,接口不允许我设置默认值。 我曾尝试使用map或其他函数来解决该问题,但未能成功。使用map,获取错误“\u this.gDetailDS.map不是函数”。 我想得到布尔值的默认值。例如,在执行以下行之后, 我应该有一个InterfaceB类型的对象,其默认设置为 你的帮助将不胜感激。