功能在ES6名称,将在一些实施JavaScript环境,as noted here on MDN。然而在TypeScript中,Function.name不存在,因为它定位于ES3或ES5。但是TypeScript允许你扩展接口。所以,你可能想要做的第一件事就是添加到您的文件的顶部:
interface Function { name: string; }
接下来的事情要注意的是,有没有什么特别的构造,它仅仅是一个函数。因此,写你的函数正确的做法是:
function doSomethingWithAConstructor(ctor: Function): string {
return ctor.name;
}
如果你想保护自己免受尚未实施Function.name环境,和/或你愿意通过约定来定义构造函数他们都是以大写字母开头的唯一功能,将其添加为你的函数的第一行:
function doSomethingWithAConstructor(ctor: Function): string {
if (!ctor || !ctor.name || ctor.name[0] === ctor.name[0].toLowerCase())
throw 'Please specify a constructor';
return ctor.name;
}
最后,还有一个名为Classical.js *库,使这要容易得多。首先,功能接口扩展不是必需的。其次,ES6不是必需的 - 如果没有定义,名称将从函数定义中解析出来。下面的代码是什么样子:
function doSomethingWithAConstructor(ctor: Function): string {
return typeOf(ctor).name;
}
或者甚至
class A {}
typeOf(A).name; //'A'
如果您想尝试一下,请访问Classical.js link,下载代码,打开bin和添加classical.js和classical.d.ts到您的项目。
希望有所帮助。
*我对古典团队
由于开发商之一,但并不完全符合我要的。查看我的更新。 – liammclennan 2014-10-22 04:09:12