试图将WebGL2打字整合到我们的项目中时,我遇到了一个类型错误,我可以煮沸到以下片段:
interface WebGL2RenderingContext {
bufferData(target: number, size: number, usage: number): void;
bufferData(target: number, srcData: ArrayBuffer, usage: number): void;
}
function test(gl: WebGL2RenderingContext, sizeOrData: number|ArrayBuffer){
gl.bufferData(0, sizeOrData, 0);
}
导致以下汇编错误:
类型'数字的参数|ArrayBuffer'不能分配给" ArrayBuffer"类型的参数。键入'number'不能分配给'arraybuffer'。
据我所知,这应该是有效的代码,但是我不确定我是否遇到了TS中的错误,不正确的打字,或者错误毕竟是否在我目的中。有建议吗?
发生这种情况,因为超载无法基于联合类型解决。过载都不匹配第二个参数的number|ArrayBuffer
类型,并且编译器不知道可以合并这对过载。尽管它被认为是痛苦点,但没有立即解决此问题的计划。
这意味着bufferData()
的WebGL2键入不是完全不正确的,但它们并不好。打字稿手册" Do and Nots"页面专门列出了它为"不"。由于签名仅因一个参数的类型而有所不同,因此最好使用联合类型,例如:
interface WebGL2RenderingContext {
bufferData(target: number, sizeOrData: number | ArrayBuffer, usage: number): void;
}
那么您的代码不会丢失错误。代替在上游贡献此定义的贡献,您可以通过声明合并本地将其本地添加到自己的代码中,一切都会适合您。
希望有帮助;祝你好运!