TypeScript中方法的名称
Name of method in TypeScript
本文关键字:方法 TypeScript 更新时间:2023-09-26
我可以在TypeScript中获得方法的名称吗?例如:
class C {
test() { return this.test.name; } // should return "test";
}
我可以通过扩展函数接口使其适用于函数:
interface Function {
name: string;
}
function f() {
return f.name; // returns "f"
}
在某种程度上,我能让这种方法也起作用吗?
简短的回答是NO,匿名函数没有名称。
如果您关心的是编译错误,那么重写接口就足够了,因为接口是部分的。但是Typescript传输class
的方式不会有任何实例方法的名称,因为它们只是对匿名函数的引用。即
它被编译成
var C = (function () {
function C() {
}
C.prototype.test = function () {
// ^__ There is no name for the function so
return this.test.name; // this will just be empty
};
return C;
})();
只有当它是这样的时候,你才会看到它用值打印function.name
:
C.prototype.test = function test() {
// ^__ Not anonymous anymore
我可以想到的一种方法是使用decorator并为属性设置值,比如propName
。
interface Function {
propName?: string;
}
function setName(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
descriptor.value.propName = propertyKey;
//or target[propertyKey].propName = propertyKey;
return descriptor;
}
class C {
@setName
test() {
return this.test.propName;
}
}
这一切都与Typescript如何转换class
有关。例如,如果你使用的是Babel,由于它转换规范的方式,你会看到它将函数引用的值按原样分配给属性描述符,因此它将保留名称。
注意:并非所有浏览器都支持Function.name
(例如:旧IE),而且属性name
在浏览器之间也不可写入,即不能更改名称。因此,使用另一个属性进行配置。
相关文章:
- 如何用Typescript用自定义方法实现类数组
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 有没有一种方法可以在泛型(<T>)函数/类(Typescript)中获取泛型类型的名称
- 在typescript中重载一个方法
- Typescript从类的构造函数调用方法
- 有没有一种简单的方法来安装TypeScript定义
- Typescript+Angular公开服务方法
- Typescript 中 AngularJS 控制器的实例与原型方法
- 订阅子属性的可观察值,并在 TypeScript 的绑定上下文中调用父方法
- 使用 TypeScript 在 OnClick 上调用方法
- TypeScript:访问类中的静态方法(相同或另一个)
- 使用类将JSON对象强制转换为typescript类型的变量的正确方法
- AngularJS:TypeScript编译过程并吞噬uglify-是否有一种方法可以强制TS使用IIFE生成函数而不是
- Breeze类型的getProperty方法不适用于Typescript
- TypeScript中的Mongoose方法范围
- typescript从字符串调用kendo ui方法
- 从Typescript中的实例访问静态方法
- 使用ES6模块的TypeScript的最佳方法是什么
- 有没有什么方法可以用Typescript强制转换或更改对象的定义
- 抽象方法TypeScript的怪异行为