TypeScript中正确初始化数值向量:linspace返回类型适配问题
为何不能用
number[]接收linspace的返回值? linspace函数返回的是Float64Array(一种类型化数组),而非TypeScript里的普通number[](即Array<number>),这就是类型不匹配报错的核心原因:
类型本质差异
普通数组number[]是JavaScript标准的Array实例,自带pop、push、concat等方法;而Float64Array属于TypedArray,是为高效处理数值设计的特殊对象,它没有这些数组方法,所以TypeScript会明确提示两种类型不兼容。关于
typeof的检测结果
用typeof检测Float64Array时会返回"object",这是因为所有TypedArray在类型检测时都会被识别为对象;而它的元素确实是number类型,所以typeof linspace(...) [0]返回"number"。但这不能混淆它和普通数组的类型,你可以用linspace(0,10,10) instanceof Float64Array来准确判断它的类型。
解决办法
- 直接使用正确的类型声明:
import {default as linspace} from '@stdlib/array-linspace' var xvalues: Float64Array = linspace(0,10, 10) - 转换为普通数组:
import {default as linspace} from '@stdlib/array-linspace' // 方法1:用Array.from var xvalues: number[] = Array.from(linspace(0,10, 10)) // 方法2:用扩展运算符 var xvalues: number[] = [...linspace(0,10, 10)]
内容的提问来源于stack exchange,提问作者Mirko
相关产品推荐
相关产品推荐

