为什么不能将正确结构的Typescript数组分配给看似兼容的元组

Jolleyboy

例如:

let myTuple: Array<[number[], number[]]> = [];
const my3dArray = [
  [[1, 2], [3, 4]],
  [[5, 6], [7, 8]],
];
myTuple = my3dArray;

出现错误:number[][][] not assignable to [number[], number[]][]使用TypeScript 3.0.1时

短信

在第二行中,您将创建一个变量,该变量将自动选择分配值的类型:

const my3dArray = [
  [[1, 2], [3, 4]],
  [[5, 6], [7, 8]],
];

分配值的类型假定为number[][][],这是正确的。

然后,将该类型的值(再次假定为number[][][])分配给具有更严格类型的变量,Array<[number[], number[]]>并且上一操作中的类型未通过检查。此时值不再重要,仅生成的类型重要。

显式类型分配可解决以下问题:

let myTuple: Array<[number[], number[]]> = [];

const my3dArray = [
  [[1, 2], [3, 4]],
  [[5, 6], [7, 8]],
] as Array<[number[], number[]]>;

myTuple = my3dArray;

或另一个选项是在赋值之前定义变量的类型:

let myTuple: Array<[number[], number[]]> = [];

const my3dArray: Array<[number[], number[]]> = [
  [[1, 2], [3, 4]],
  [[5, 6], [7, 8]],
];

myTuple = my3dArray;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能将数组分配给 Pandas DataFrame 列?

为什么不能将数组的地址分配给指针?

为什么不能将结构分配给具有其实现特征的绑定

为什么我不能将 int 分配给结构成员的联合成员?

将元组分配给数组

为什么不能将匿名方法分配给var?

为什么不能将项目分配给对象的常量?

为什么不能将背景颜色分配给视图

为什么不能将* Struct分配给* Interface?

为什么不能将lambda分配给Object?

为什么我们不能将字符串值分配给2d char数组?

在C语言中,为什么在声明字符串后不能将其分配给char数组?

为什么数组不能分配给Iterable?

将结构数组分配给协议数组

尝试将多维数组分配给结构

为什么将此数组分配给未指定的数组?

为什么不能将类型SFC <AnchorProps>分配给类型SFC <{}>?

为什么不能将方法引用直接分配给Object类型的变量?

为什么不能将函数分配给Object.prototype.click?

为什么不能将道具分配给常量并渲染它

为什么不能将子类型值分配给泛型类型?

为什么不能将BlockingCollection <T>分配给IReadOnlyCollection <T>?

为什么不能将Nothing分配给Unit类型的变量?

为什么不能将 std::bind 的结果分配给函数指针

在IntelliJ中,为什么不能将键映射分配给“最近打开”

为什么不能将工作项分配给团队成员?

为什么不能将基类对象分配给派生类对象?

为什么我不能将 new 创建的 &client 对象分配给 unique_ptr

为什么我不能将wordpress函数分配给变量?