gpt4 book ai didi

node.js - Typescript:调用多种类型的重载

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:20 25 4
gpt4 key购买 nike

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

如果该类型不是 Buffer,我想将其转换为 Buffer,因此我使用 !Buffer.isBuffer(...) 检查它是否不是 Buffer,然后尝试使用 Buffer.from(...) 将其转换为 Buffer,它应该接受其余类型 (string | UInt8Array)。

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

有更好的方法吗?

public send(data: string | Buffer | Uint8Array): void {
if (!Buffer.isBuffer(data)) {
if (typeof data === 'string') {
data = Buffer.from(data); // string
} else {
data = Buffer.from(data); // Uint8Array
}
}
}

最佳答案

经过一番思考,我认为问题是由于 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 的方法重载,它只需要其中一种类型。

如果有人有更好的答案,我很高兴听到。

关于node.js - Typescript:调用多种类型的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com