【问题标题】:How to only accept ArrayBuffer as parameter如何只接受 ArrayBuffer 作为参数
【发布时间】:2020-11-27 12:25:44
【问题描述】:

我有一个类,它在构造函数中接受数组缓冲区参数,如下所示:

class Test {
    public constructor(buffer: ArrayBuffer) {
        ...
    }
}

问题是ArrayBuffer 类型是一个非常小的接口,它也会意外匹配类型化数组(不是数组缓冲区)。所以我的类也可以用类型化数组作为参数来构造。所以这两个调用都对编译器有效:

new Test(new Float32Array([ 1, 2, 3, 4 ]).buffer);  // <-- Correct usage
new Test(new Float32Array([ 1, 2, 3, 4 ]));         // <-- Wrong usage

为了防止以错误的方式使用我的 API,我希望编译器拒绝将类型化数组传递给构造函数。任何人都知道如何实现这一点的一个不错的小技巧?

【问题讨论】:

    标签: typescript arraybuffer typed-arrays


    【解决方案1】:

    没关系,找到解决办法了:

    type StrictArrayBuffer = ArrayBuffer & { buffer?: undefined };
    

    它匹配一个真正的ArrayBuffer,因为它没有buffer 属性,并且它不匹配一个类型化数组,因为这个类型有一个buffer 属性,它与undefined 类型不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多