泛型获取类名

从我的草坪上离开

我有一个通用函数,我想获取传入的类的名称。

public addComponent<T extends Component>(): Component {
    comp = new Component() as T;
    comp.name = T.constructor.name;
    console.log(comp.name);
    return comp;
}

然后说我这样称呼它:

obj.addComponent<MyClass>();

然后,我希望日志显示“ MyClass”。但是目前我收到一个错误消息:

找不到名称“ T”。

尼桑·托默尔

无法做到这一点。

T在运行时不存在的,它只是编译,编译器将删除(连同类型),所以这种情况的造成的javascript:

class MyFactory {
    public addComponent<T extends Component>(): Component {
        let comp = new Component() as T;
        comp.name = T.constructor.name;
        console.log(comp.name);
        return comp;
    }
}

是:

var MyFactory = (function () {
    function MyClass() {
    }
    MyFactory.prototype.addComponent = function () {
        var comp = new Component();
        comp.name = T.constructor.name;
        console.log(comp.name);
        return comp;
    };
    return MyFactory;
}());

如您所见,js代码没有泛型签名,因此没有的定义T,因此会T.constructor导致您收到错误。

如果希望方法通过传递方法来创建类的实例,则它应类似于:

interface ComponentConstructor<T extends Component> {
    new(): T;
    name: string;
}

class Component {
    name: string;
}

class MyComponent extends Component {}

class MyFactory {
    public addComponent<T extends Component>(ctor: ComponentConstructor<T>): Component {
        let comp = new ctor();
        comp.name = ctor.name;
        console.log(comp.name);
        return comp;
    }
}

let factory = new MyFactory();
let obj = factory.addComponent(MyComponent as ComponentConstructor<MyComponent>);

操场上的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是泛型类

来自分类Dev

泛型方法从超类获取参数类型

来自分类Dev

如何以编程方式获取泛型类的名称?

来自分类Dev

boost变体:获取提供变体的泛型类的指针

来自分类Dev

类的Dlang泛型

来自分类Dev

使用开放定义从泛型类的属性获取价值

来自分类Dev

如何使用Java Reflectionioin获取列表的泛型类?

来自分类Dev

尝试获取泛型类型类时发生ClassCastException

来自分类Dev

Spring获取泛型类型类

来自分类Dev

获取使用特定泛型实现类的所有类

来自分类Dev

Spring 4泛型类,获取参数化类型

来自分类Dev

从类中获取泛型参数的类型,该类是从泛型接口继承的

来自分类Dev

如何从泛型方法参数中获取Java类?

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

用泛型获取列表的类,例如:List <Number> :: class

来自分类Dev

如何使用“ typeof”从泛型类获取类型?

来自分类Dev

从非泛型静态类中的泛型重载方法获取RuntimeMethodInfo

来自分类Dev

使用泛型获取类的实例

来自分类Dev

什么是泛型类

来自分类Dev

如何为泛型类方法获取正确的扩展方法?

来自分类Dev

从Java中的枚举属性获取泛型类的实例

来自分类Dev

类的Dlang泛型

来自分类Dev

泛型类等于

来自分类Dev

Java泛型难题-获取泛型类型的对象的类/类型,以便以后可以确保类型

来自分类Dev

在泛型类中通过 lambda 获取属性名称

来自分类Dev

使用类的实例获取类的泛型类型参数的数量?

来自分类Dev

Swift 获取泛型类中的所有属性

来自分类Dev

c#获取泛型类中泛型类型参数的名称

来自分类Dev

Java 泛型:如何在泛型接口中获取泛型类的 Id?

Related 相关文章

热门标签

归档