TypeScript中的静态块

osh3o9ms  于 2023-04-07  发布在  TypeScript
关注(0)|答案(2)|浏览(118)

为了测试网络编码/解码逻辑,我用Java和JavaScript做了一对测试。对于这些测试,我有数据提供程序,它们几乎只是一堆常量。
现在,在Java中,我有一个数据提供程序,它使用一个静态块为我想要测试的类之一创建一个随机字节数组,如下所示:

public static final byte[] BYTE_ARRAY_RANDOM = new byte[4 * 1024];
    static {
        new Random().nextBytes(BYTE_ARRAY_RANDOM);
    }
    public static final FileBody FILE_BODY_RANDOM = new FileBody(BYTE_ARRAY_RANDOM);

现在我想在TypeScript中镜像它。我已经尝试过了,但这会导致编译器错误,因为我显然做错了静态块:

public static BYTE_ARRAY_RANDOM: Uint8Array = new Uint8Array(4 * 1024);
    static {
        BYTE_ARRAY_RANDOM.set(pseudoRandomBytes(bytes.length));
    }
    public static FILE_BODY_RANDOM: FileBody = new FileBody(TestDataProvider.BYTE_ARRAY_RANDOM);

我也尝试了许多其他方法,但到目前为止还没有能够制定出一个解决方案。
那么,我在JavaScript中如何做到这一点呢?我想要的是创建一个Constant,它在每次运行测试时提供一个任意的随机字节数组。
或者换个方式问:如何在TypeScript中转换此静态?

let bytes = new Uint8Array(4 * 1024);
    bytes.set(pseudoRandomBytes(bytes.length));
    let fileBody = new FileBody(bytes);
o75abkj4

o75abkj41#

我不认为TypeScript支持静态块。对于您的特定情况,您可以创建一个helper函数:

class Foo {
    public static bytes = createRandomBytes(4 * 1024);
    public static fileBody = new FileBody(Foo.bytes);
}

function createRandomBytes(length: number) {
    const bytes = new Uint8Array(length);
    bytes.set(pseudoRandomBytes(bytes.length));
    return bytes;
}
bnl4lu3b

bnl4lu3b2#

TypeScript支持静态初始化块,从TypeScript 4.4开始(2021年8月可用)
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-rc/#static-blocks
它也支持JavaScript:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks
语法如你所料,即:

static {
    // Your code here
}

相关问题