Typescript:数字| ArrayBuffer的函数重载解析

Typescript:数字| ArrayBuffer的函数重载解析,typescript,typescript-typings,Typescript,Typescript Typings,在尝试集成到我们的项目中时,我遇到了一个类型错误,可以归结为以下几点: 这将导致以下编译错误: “number | ArrayBuffer”类型的参数不能分配给“ArrayBuffer”类型的参数。类型“number”不可分配给类型“ArrayBuffer” 据我所知,这应该是有效的代码,但我不能完全确定我是否在TS中遇到了错误,输入错误,或者错误到底是在我这边。有什么建议吗 发生这种情况是因为。这两个重载都与第二个参数的number | ArrayBuffer类型不匹配,并且编译器不理解这对重

在尝试集成到我们的项目中时,我遇到了一个类型错误,可以归结为以下几点:

这将导致以下编译错误:

“number | ArrayBuffer”类型的参数不能分配给“ArrayBuffer”类型的参数。类型“number”不可分配给类型“ArrayBuffer”

据我所知,这应该是有效的代码,但我不能完全确定我是否在TS中遇到了错误,输入错误,或者错误到底是在我这边。有什么建议吗

发生这种情况是因为。这两个重载都与第二个参数的
number | ArrayBuffer
类型不匹配,并且编译器不理解这对重载可以合并。尽管这被认为是一个痛点,但目前还没有解决这一问题的计划

这意味着
bufferData()
的WebGL2类型并不完全不正确,但也不是很好。TypeScript手册的“应做和不应做”页面特别列出了这一点。由于签名仅因一个参数的类型不同而不同,因此最好使用联合类型,如下所示:

interface WebGL2RenderingContext {
  bufferData(target: number, sizeOrData: number | ArrayBuffer, usage: number): void;
}
那么您的代码不会抛出错误。您可以通过将此定义本地添加到自己的代码中,而不是将其返回到上游,这样一切都可以为您工作

希望有帮助;祝你好运

interface WebGL2RenderingContext {
  bufferData(target: number, sizeOrData: number | ArrayBuffer, usage: number): void;
}