我遇到了这个问题,搜索了几个小时却找不到合适的解决方案。
我正在尝试创建一个通用函数来恢复类型和对象并将对象转换为该特定类型。但我在实例化泛型类型时遇到了麻烦。我想知道 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(使用前将#替换为@)