Typescript 实例化通用对象

2023-12-12

我遇到了这个问题,搜索了几个小时却找不到合适的解决方案。 我正在尝试创建一个通用函数来恢复类型和对象并将对象转换为该特定类型。但我在实例化泛型类型时遇到了麻烦。我想知道 c# Activator.CreateInstance 中是否有类似的东西

handleResult<T>(response: Response):T {
    let jsonResp = response.json();
    let obj = jsonResp as Object;
    let resp: T = Object.CreateInstance(T); //        
    doTheMambo(resp, obj);
    return resp;
}

在 TypeScript 中,泛型参数在编译过程中会被删除,并且在生成的 JavaScript 代码中没有它们的踪迹。所以没有什么像CreateInstance来自 c#.

但是,再次与 C# 不同,TypeScript 中的类可以像任何其他对象一样在运行时使用,因此,如果您需要的只是在运行时创建类的实例,则可以非常轻松地做到这一点(请注意,它仅适用于类,一般不属于任何类型)。

语法为泛型类类型参数看起来有点不寻常:它是一个文字类型,写为{new(...args: any[]): T}

这是完整的(它编译的)示例,它执行类似于您在问题中描述的操作。为了简单起见,我假设所有需要实例化的对象都必须符合通用的interface Result(否则你必须在 doTheMambo 中将类型转换为某些已知类型才能做一些有用的事情)。

interface Response { json(): any }

interface Result { kind: string }

function handleResult<T extends Result>(tClass: { new (...args: any[]): T }, response: Response): T {
    let jsonResp = response.json();
    let obj = jsonResp;
    let resp: T = new tClass();        
    doTheMambo(resp, obj);
    return resp;
}

class Result1 {
    kind = 'result1';
}

function doTheMambo<T extends Result>(response: T, obj: any) {
    console.log(response.kind);
}

const r: Result = handleResult(Result1, { json() { return null } });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 实例化通用对象 的相关文章

随机推荐

  • Java listjar 目录中的文件

    有什么办法可以使用吗listFiles 在已打包到 jar 中的目录上 假设我的资源目录中有一个目录 其中包含一些文本文件 texts text1 txt and texts text2 txt 在这个 Java 程序中 我有一个需要使用的
  • 正确使用GetRawInputBuffer

    我正在尝试使用 Win32 原始输入 API 以更高精度收集原始鼠标数据 但我似乎无法理解文档和样本完全为了GetRawInputBuffer 当我的鼠标悬停在窗口上时 似乎什么也没有发生 当我单击或释放窗口标题栏时 我似乎只获得缓冲数据
  • NetBeans 不再为以前生成的代码生成 JAR 文件

    两年前 我使用 Java 编写了一个简单的上传小程序 使用 NetBeans 开发 当我第一次点击 清理和构建 时 以及之后的一段时间 它运行得非常完美 它将运行整个构建过程并生成一个 JAR 文件 然后我可以将其上传到我的 Web 服务器
  • 用于阻止特定日期(假期)的引导日期选择器配置

    有谁知道如何配置日期选择器不显示特定日期 例如 7 月 4 日 这似乎可以使用 beforeShowDay 来完成 但我并不肯定 http jsfiddle net Lr3taznx a array of dates that should
  • 如何启用cookie

    我有这个任务来读取 写入 启用 cookie 以便将用户名存储在变量中 然后写入 cookie 我的问题是代码的最后一部分似乎正在工作 但是用户名应该存储到变量中的第一部分不起作用 我可以看到当我运行代码时 前两个警报框没有显示 它应该以
  • React传单和react-leaflet-draw

    我正在尝试在传单地图上实现绘制功能 我创建了一个仅安装了react leaflet的新应用程序 使用npx create react app并安装了以下软件包 npm install React React dom 传单 npm 安装反应传
  • 复制到剪贴板在 Android 上不起作用

    使用此视图创建标准移动应用程序 public class DebugView extends View ListView
  • 为什么 sys.getrefcount 给出巨大的值?

    import sys a 10 b a print sys getrefcount a b 1 print sys getrefcount b output 22 614 我的Python解释器有问题吗 为什么这会给出像 614 这样巨大的
  • Android:Proguard 的推荐配置是什么?

    我正在为 Android 开发应用程序并使用 Proguard 来混淆代码 目前我正在使用 ProGuard 配置 optimizationpasses 5 dontusemixedcaseclassnames dontskipnonpub
  • MVC4 & IClientValidatable - 自动 AJAX 调用服务器端验证

    我正在寻找在 MVC4 中实现自定义客户端验证 我目前让它与标准属性配合得很好 例如我的模型中的这个 public class UploadedFiles StringLength 255 ErrorMessage Path is too
  • 使用 std::for_each 和 std::views::iota 的并行 for 循环

    我想使用以下方法为基于并行索引的 for 循环设置一个简单的解决方法std views 为了按顺序运行 代码如下所示 int main pseudo random numbers random device rd default rando
  • 使多维数组唯一的php

    我的数组如下所示 大批 1 gt stdClass Object id gt 225 user id gt 1 name gt Blue Quilted Leather Jacket by Minusey 499 2 gt stdClass
  • 添加行时数据表中的重复列

    我创建一个 DataTable 并将其绑定到 DataGrid 我的数据源由一个表 FooTable 组成 该表由一列 FooName 组成 以下代码运行良好 除了每次添加新行时 都会有一个重复的列填充相同的数据 我不知道如何摆脱它 请参阅
  • 使用 XPATH 或 CSS 选择器在 Selenium 中查找元素

    我试图在 C 中使用 Selenium Webdriver 查找元素 导入 已尝试以下代码但没有找到它 driver FindElement By XPath class menu bg ul li 3 Click driver FindE
  • 正确删除单例

    我有以下代码 我的类 h static MyMutex instanceMutex static MyClass getInstance static void deleteInstance 我的类 c MyMutex MyClass in
  • 卷曲发送内容长度标头时出现问题

    我需要将文件上传到 wupload 这是我的功能 public function doPost link postfields cookie ref nobody false upload false header true headers
  • 当类型参数之一应该为 Nothing 时,为什么 Scala 的隐式类不起作用?

    Update 我修改了示例以便可以编译和测试 我有一个定义丰富方法的隐式类 case class Pipe I O R f I gt O R object Pipe The problematic implicit class implic
  • Docker - 名称已被容器使用

    运行docker使用以下命令的注册表总是会抛出错误 dev tmp me docker run d name registry v1 e SETTINGS FLAVOR local e STORAGE PATH registry e SEA
  • PowerShell Tee-Object 未捕获文件中的调试行

    我有一个通过自动化运行的 PowerShell 脚本 因此我需要将脚本的输出捕获到文件中 但我还想捕获运行的命令 为输出提供一些上下文 我会使用set x在 Linux shell 脚本中 不过 我不知道如何将这些命令捕获到 Windows
  • Typescript 实例化通用对象

    我遇到了这个问题 搜索了几个小时却找不到合适的解决方案 我正在尝试创建一个通用函数来恢复类型和对象并将对象转换为该特定类型 但我在实例化泛型类型时遇到了麻烦 我想知道 c Activator CreateInstance 中是否有类似的东西