能否从类中生成独立函数?指定类生成无类包裹TypeScript函数可行性
嘿,咱们来逐个拆解你的问题:
1. 是否可以从类中生成函数?
当然可以!在TypeScript(以及JavaScript)生态里,类的方法本质上就是函数,你可以通过多种方式从类里提取或者生成独立的函数:
- 提取实例方法:如果有类的实例,你可以直接把它的方法抽出来,但要注意
this上下文的问题——如果方法里用到了类的成员,记得用bind绑定实例,或者用箭头函数来保留上下文。举个实际的例子:class MyClass { private num = 42; foo() { console.log(this.num); } } const instance = new MyClass(); // 绑定上下文后得到独立函数 const standaloneFoo = instance.foo.bind(instance); standaloneFoo(); // 输出 42 - 提取静态方法:类的静态方法本身就挂载在类这个对象上,直接拿过来用就是独立函数:
class MyClass { static bar() { console.log("这是静态方法转来的独立函数"); } } const standaloneBar = MyClass.bar; standaloneBar(); // 输出对应的内容
另外,你也可以手动把类方法里的逻辑复制出来,改写成独立函数,这也算一种手动“生成”方式。
2. 给定类代码:public class { public void Foo() {} },能否生成未被类包裹的TypeScript函数foo() { }?
完全没问题!首先你给出的这段类代码看起来像是C#(或类似强类型语言)的语法,可能少了类名,比如应该是public class SomeClass { public void Foo() {} }。不管怎样,转换的思路很清晰:
- 如果原
Foo方法没有依赖类的任何成员(比如没用到类的属性、其他方法),那直接把方法体抽出来,改成TypeScript的函数格式就行:function foo() { // 把原Foo方法里的逻辑放到这里 } - 如果原方法依赖类的成员,那你需要把这些依赖转换成函数的参数,或者用其他方式处理上下文。比如原类是这样的:
转换成TypeScript独立函数的话,可以改成这样:public class MyClass { private int _counter = 0; public void Foo() { _counter++; Console.WriteLine(_counter); } }function foo(counter: number): number { const newCounter = counter + 1; console.log(newCounter); return newCounter; } // 使用时维护状态 let currentCounter = 0; currentCounter = foo(currentCounter); // 输出 1
要是你想自动化完成这类转换,很多代码转译工具也能帮你搞定,只要方法没有太复杂的类内部依赖就行。
内容的提问来源于stack exchange,提问作者Toni Petrina
相关产品推荐
相关产品推荐

