打字稿:调用多种类型的重载

时间:2019-06-30 04:33:24

标签: node.js typescript

我有一个类方法,该方法接受三种不同类型的值:stringBufferUint8Array

如果不是缓冲区,我想将类型转换为缓冲区,所以我使用!Buffer.isBuffer(...)检查它是否不是缓冲区,然后尝试使用{{ 1}},它应该接受其余两种类型之一(Buffer.from(...) | string)。

不幸的是,Typescript认为我正在尝试将UInt8Array转换为UInt8Array,但显然不是,所以我必须添加手动string检查以使其保持快乐

有更好的方法吗?

typeof

1 个答案:

答案 0 :(得分:0)

经过一番思考,我认为问题是由于在Buffer.from(...) type annotations on the DefinatelyTyped repository

中写入了重载的方式
declare function bufferFrom(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
declare function bufferFrom(str: string, encoding?: string): Buffer;
declare function bufferFrom(data: ReadonlyArray<any> | Buffer): Buffer;

在Javascript中,它可以处理ArrayBuffer | string | ReadOnlyArray<any>(实际上是any),但是由于Typescript的方法重载,它只希望这些类型之一。

如果有人有更好的答案,我很乐意听到。