gpt4 book ai didi

typescript - 在 typescript 中创建动态类实例

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:59 24 4
gpt4 key购买 nike

我正在使用 webpack、typescript 2.8、es5。

我想从变量名创建动态类实例,例如:

protected handleAfterInit(page) : void 
{

let instance: any;
let pageName: string = this.capitalizeFirstLetter(page);

console.log(pageName);

instance = Object.create((window[pageName]).prototype);
instance.constructor.apply(instance);

console.log(instance);
}

其中 pageName 是一个变量(Home、About 等)并且这些类已经导入到页面顶部:

import { Home } from "./Home";
import { About } from "./About";

但是使用当前代码我得到一个错误:

Cannot read property 'prototype' of undefined

好像没有窗口。{class}

是否可以在 typescript 中做这样的事情?

最佳答案

由于您从模块中导入类 HomeAbout,因此它们不在 window 对象中。

最简单的方法是使用构造函数签名:

protected handleAfterInit(page: new () => any): void {
let instance = new page()
}

如果您需要按名称访问页面,您可以创建一个包含页面的 map ,然后调用 avbove 方法:

pagesByName : { [name: string] :new () => any } = {Home, About};
protected handleAfterInitByName(pageName: string): void {
this.handleAfterInit(this.pagesByName [pageName]);
}

您还可以将 new () => any 中的 any 替换为所有页面的基类,以提供更好的类型检查。

关于typescript - 在 typescript 中创建动态类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com