Typescript 如何区分类和函数

Typescript 如何区分类和函数,typescript,typescript1.8,Typescript,Typescript1.8,是否有一种方法可以在运行时区分类(不是它的实例!)和TypeScript中的函数 通常情况下,typescript中的类被传输到javascript函数,在运行时,我找不到一个好方法来检查标识符是函数还是类类型 例如: 函数func1(){ } 一班{ } //丑陋的黑客 (class1.prototype).isclass=true; //丑陋的黑客测试 函数为_类(clazz:any){ 返回( 克拉兹 &&克拉兹原型 &&(clazz.prototype).isclass==true )

是否有一种方法可以在运行时区分类(不是它的实例!)和TypeScript中的函数

通常情况下,typescript中的类被传输到javascript函数,在运行时,我找不到一个好方法来检查标识符是函数还是类类型

例如:

函数func1(){
}
一班{
}
//丑陋的黑客
(class1.prototype).isclass=true;
//丑陋的黑客测试
函数为_类(clazz:any){
返回(
克拉兹
&&克拉兹原型
&&(clazz.prototype).isclass==true
);
}
console.log(typeof(func1)=‘function’;//返回真值!!
console.log(typeof(class1)=‘function’;//返回真值!!
console.log(是_类(func1));//返回false:)

console.log(is_class(class1));//返回true:)
否,在针对ES5或更低版本时不返回。类是可以在编译的JavaScript中看到的函数:

var class1 = (function () {
    function class1() {
    }
    return class1;
}());
但是,如果您的目标是ES6,那么您可以确定。看一看

也就是说,您可以创建一个所有其他类都从中继承的类:

class BaseClass {
    static isClass = true;
}

class Class1 extends BaseClass {

}

console.log(Class1.isClass); // true
您不能确定地这样做,但您可以使用启发式,因为
方法通常是在
原型
上进行的,因此:

class Foo {
   foo(){}
} 
function foo(){}
console.log(!!Object.keys(Foo.prototype).length); // true : is class 
console.log(!!Object.keys(foo.prototype).length); // false : is not a class

谢谢,我得出了同样的结论,你的回答证实了这看起来是一个更干净的解决方案。我必须运行这两个单元测试并查看结果。谢谢:)