首页 > 解决方案 > TypeScript 中的静态块

问题描述

为了测试网络编码/解码逻辑,我用 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 中做到这一点?我想要的是创建一个常量,每次运行测试时提供一个任意随机字节数组。

或者换一种方式问这个问题:我怎样才能在 TypeScript 中把这个静态化?

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

标签: typescript

解决方案


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

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;
}

推荐阅读