在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是什么意思,需要了解classesclass membersstatic class members。跨度> 您不能在静态方法中使用非静态成员。非静态成员绑定到类实例,在没有实例的类上调用静态方法。静态方法应该引用哪个this 【参考方案1】:

javascript 类!= 此类的一个实例。

将类想象为由其中的字段定义的某种形状。您可以使用 new 关键字来实例化此形状。在 javascript(以及打字稿)中,您可以将您的类的实例分配给一个变量。例如

const myWallet = new Wallet();

然后您可以将另一个实例分配给另一个变量

const someOtherWallet = new Wallet();

在这种情况下,myWalletsomeOtherWallet 具有相同的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和打字稿中使用变量到静态方法的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中的Nodejs需要('this')(that)

nodejs和打字稿中的Prisma事务不起作用

打字稿中的通用对象类型

!对象方法后打字稿中的运算符

!对象方法后打字稿中的运算符

在打字稿中的类中创建具有未知参数的方法