我有一个类方法,该方法接受三种不同类型的值:string
,Buffer
和Uint8Array
。
如果不是缓冲区,我想将类型转换为缓冲区,所以我使用!Buffer.isBuffer(...)
检查它是否不是缓冲区,然后尝试使用{{ 1}},它应该接受其余两种类型之一(Buffer.from(...)
| string
)。
不幸的是,Typescript认为我正在尝试将UInt8Array
转换为UInt8Array
,但显然不是,所以我必须添加手动string
检查以使其保持快乐
有更好的方法吗?
typeof
答案 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的方法重载,它只希望这些类型之一。
如果有人有更好的答案,我很乐意听到。