2017-12-03 104 views
0

如何从基类本身获得子类的名称(即调用基类的构造函数)TypeScript。我有一些代码设置为:如何从打字稿中的父类中获取子类的名称?

class Animal{ 
    constructor(){ console.log(this.constructor.name)} //this is throwing error} 
} 
class Cow extends Animal{ 
constructor(){ super() } 
} 
new Cow() // this should log "Cow" 

在用于工作,但似乎这架飞机Jsthis.constructor.nameTypeScript的情况。 我得到的错误是:

error TS2339: Property 'name' does not exist on type 'Function'. 

请帮忙。谢谢

+0

[对我的作品(http://www.typescriptlang.org/play/#src=class%20Animal%7B%20constructor()%20%7B%20console.log (%22name%22%2C%20this.constructor.name)%3B%20%7D%20%7D%0D%0Aclass%20Cow%20extends%20Animal%7B%20constructor()%7B%20super()%20%7D %2%7D%0D%0Anew%20Cow()),在我删除了内嵌评论后,“隐藏”了* Animal#constructor()*的结尾'},并添加了一些实际的日志记录 – Thomas

+0

hmm!它怎么不适合我。 – CodeBlooded

+0

此错误是编译错误还是运行时错误?如果这是一个编译错误,那么你正在运行什么打字稿? –

回答

0

这应该失败的唯一原因是在Internet Explorer/IE Mobile中,因为Function.name基本支持不存在。在所有其他浏览器中,它应该可以工作。

如果您的目标是ESNEXT并且输出包含ECMAScript类(即与TypeScript类似),则此功能甚至可以工作。下面的代码可以在快节奏的快乐浏览器中工作......并且如果通过TypeScript编译器运行它,纯文本也可以工作(除非如上所述)。

class Animal { 
 
    constructor() { 
 
     console.log(this.constructor.name); 
 
    } 
 
} 
 

 
class Cow extends Animal{ 
 
    constructor() { 
 
     super(); 
 
    } 
 
} 
 

 
new Cow();

+0

这段代码和我的问题一样。这不工作!这就是为什么我要求帮助.. – CodeBlooded

+0

@CodeBloded - 你使用什么浏览器?我在多个浏览器上进行了测试,并注意到那些不适合我的答案。 – Fenton