代码之家  ›  专栏  ›  技术社区  ›  user581157

获取传递给typescript的泛型参数的类名

  •  1
  • user581157  · 技术社区  · 6 年前

    如何获得传递的泛型参数的类名

    class Sample<T>{ 
        public getTypeName(): void { 
            alert(T.name)
            //or
            alert(new T().constructor.name)
        }
    }
    class Person { 
        public FullName:string
    }
    new Sample<Person>().getTypeName()
    

    我需要将输出打印为“ " ?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Titian Cernicova-Dragomir    6 年前

    当类型泛型类型在编译器时被删除时,您可以传入类的构造函数并获得该类的名称:

    class Sample<T>{ 
        public constructor(public tCtor: new (...args:any[]) => T){}
        public getTypeName(): void { 
            console.log(this.tCtor.name)
        }
    }
    class Person { 
        public FullName!:string
    }
    new Sample(Person).getTypeName()
    
        2
  •  1
  •   seflue    4 年前

    因为我不能对 answer of Titian Cernicova-Dragomir :

    这只有在调用方的上下文是非泛型的情况下才有意义,而通常情况可能并非如此。如果我手头只有一个泛型参数(例如在泛型类中),那么就无法创建其实例化类型的运行时实例或使用实例化类型的名称,即使编译时需要的信息应该是可用的。对于C++模板或java/C语言泛型的人来说,这是一个遗憾。