在nodejs和打字稿中使用变量到静态方法
Posted
技术标签:
【中文标题】在nodejs和打字稿中使用变量到静态方法【英文标题】:using variable to static method in nodejs and typescript 【发布时间】:2021-09-15 04:08:32 【问题描述】:我有一个类,这个类我需要使用静态方法,在那个方法中我使用了变量,但它显示了这个错误:
类型“typeof Wallet”.ts 上不存在属性“ec”
我不需要设置静态变量。
我该如何解决这个问题?
export class Wallet
ec: any;
constructor()
this.EC = elliptic.ec;
this.ec = new this.EC('secp256k1');
static verifySignuture(address: string, data: any, signature: any): boolean
const keyfromPublic = this.ec.keyFromPublic(address, 'hex');
return keyfromPublic.verify(Utility.GenerateHash(data), signature);
如何解决这个问题?
【问题讨论】:
你为什么不设置静态,静态是使该功能静态(即从类型可访问)所必需的。 您说“需要使用静态方法”...为什么它需要是静态的?如果它需要是静态的,那么ec
也必须是静态的。很明显你不明白static
是什么意思,需要了解classes、class members和static class members。跨度>
您不能在静态方法中使用非静态成员。非静态成员绑定到类实例,在没有实例的类上调用静态方法。静态方法应该引用哪个this
?
【参考方案1】:
javascript 类!= 此类的一个实例。
将类想象为由其中的字段定义的某种形状。您可以使用 new
关键字来实例化此形状。在 javascript(以及打字稿)中,您可以将您的类的实例分配给一个变量。例如
const myWallet = new Wallet();
然后您可以将另一个实例分配给另一个变量
const someOtherWallet = new Wallet();
在这种情况下,myWallet
和someOtherWallet
具有相同的shape
,但是有两个分离的相同形状(类)的实例。通过使用static
字,您将形状的字段分配给形状本身而不是构造实例。因此,如果您的方法是静态的,而不是调用this.myMethod()
,您需要调用MyClass.myMethod()
- 在您的情况下为Wallet.verifySignature()
。不同之处在于this
这个词。它代表您在代码的特定部分中运行的 javascript 上下文。 You can find more about it here。类的non-static
方法的优点是能够在这些方法中访问this
上下文。如果您不需要访问this
,您可以继续使用静态方法。在第一种情况下(当我将类Wallet
的新实例分配给名为myVallet
的局部变量时,this context
(在Wallet
类中)等效于名为myVallet
的变量,但区别在于你要去哪里访问它.在你的情况下,你试图在verifySignature
方法中访问this
上下文,这是错误的,因为在类的静态方法中,this
上下文不是你的类的实例。而是在方法声明之前删除 static
关键字并尝试以下操作:
const wallet = new Wallet();
const signatureVerified = wallet.verifySignature(address, data, signature);
【讨论】:
以上是关于在nodejs和打字稿中使用变量到静态方法的主要内容,如果未能解决你的问题,请参考以下文章