首页 > 解决方案 > 在nodejs和打字稿中使用变量到静态方法

问题描述

我有一个类,这个类我需要使用静态方法,在那个方法中我使用变量,但它告诉我这个错误:

类型“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);
    }

}

如何解决这个问题?

标签: javascriptnode.jstypescript

解决方案


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

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

const myWallet = new Wallet();

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

const someOtherWallet = new Wallet();

在这种情况下myWalletsomeOtherWallet具有相同的shape,但有两个相同形状(类)的独立实例。通过使用staticword,您将形状的字段分配给形状本身而不是构造的实例。所以如果你的方法是静态的,而不是调用this.myMethod()你需要调用MyClass.myMethod()- 在你的情况下Wallet.verifySignature()。不同之处在于this单词。它代表您在代码的特定部分中运行的 javascript 上下文。你可以在这里找到更多关于它的信息。类的方法的优点non-static是能够访问this这些方法中的上下文。如果您不需要访问this,您可以继续使用静态方法。在第一种情况下(当我分配一个类的新实例时WalletmyVallet到一个名为,的局部变量this context(在一个Wallet类中)等价于一个名为 的变量myVallet,但区别在于您要从哪里访问它。在您的情况下,您试图访问方法this内部的上下文verifySignature,这是错误的,因为在类的静态方法内部,this上下文不是您的类的实例。而是在方法声明之前删除一个static关键字并尝试这样的事情:

const wallet = new Wallet();
const signatureVerified = wallet.verifySignature(address, data, signature);

推荐阅读