【发布时间】:2020-08-15 11:34:15
【问题描述】:
我正在尝试编写这样的函数:
export function createTypedArray<T extends TypedArray>( arg : { source : T, arraySize : number } ) : T {
if( arg.source instanceof Int32Array ) {
return new Int32Array( arg.arraySize );
}
if( arg.source instanceof Float32Array ) {
return new Float32Array( arg.arraySize );
}
if( arg.source instanceof Float64Array ) {
return new Float64Array( arg.arraySize );
}
throw 'Unsupported typed array type!';
}
问题是打字稿编译器给了我这样的错误:
类型“Int32Array”不可分配给类型“T”。 “Int32Array”可分配给“T”类型的约束,但“T”可以用约束“TypedArray”的不同子类型实例化。ts(2322)
我注意到如果我像这样添加 可以消除错误:
return <T> new Int32Array( arg.arraySize );
有没有更好的方法来编写这个函数?
有没有办法这样写:
export function createTypedArray<T extends TypedArray>( arg : { source : T, arraySize : number } ) : T {
if( arg.source instanceof Int32Array ||
arg.source instanceof Float32Array ||
arg.source instanceof Float64Array
) {
return new <T>( arg.arraySize );
}
throw 'Unsupported typed array type!';
}
【问题讨论】:
-
据我所知和as far as this open issues states,没有基于
TypedArray的类。你能澄清一下你做了什么吗?也许您定义了未显示的联合类型?例如type TypedArray = Int32Array | Float32Array | Float64Array -
我正在使用 ThreeJS,它在这里定义了一个 TypedArray:github.com/mrdoob/three.js/blob/…
标签: typescript generics