【问题标题】:Tuple with fixed length固定长度的元组
【发布时间】:2019-02-28 07:24:53
【问题描述】:

元组中的打字稿允许添加以前使用过的任何类型的额外元素,但我想限制长度。我试过& { length: 2 }but it didn't helped

declare var a: [string, number] & { length: 2 };

a[0] = "1"
a[1] = 2;
a[2] = "3";
a[3] = 4;

[2][3] 的分配不会产生错误。如何指定对应的类型?

【问题讨论】:

  • 这里有一些解决方案:stackoverflow.com/questions/41139763/…
  • @colxi,其实从3.1版本开始就没有这个问题了。
  • 元组不会阻止您在数组初始化后添加/删除键,但有一些解决方案可以实现安全的 FixedLengthArray 类型签名
  • @colxi,是的,我明白你对这个问题的回答。

标签: arrays typescript tuples


【解决方案1】:

如果您使用的是 Typescript 3.1 或更新版本,则无需为元组添加特殊限制:

declare var a: [string, number];

您可能会注意到该代码

declare var a: [string, number];

a[0] = "1"
a[1] = 2;
a[2] = "3";
a[3] = 4;

compiles in 3.0.1doesn't compile in 3.1.6 带有消息

索引“2”在长度为 2 的元组中超出范围。
索引“3”在长度为 2 的元组中超出范围。

【讨论】:

    【解决方案2】:

    使用类型never for array tail

    declare var a: [string, number, ...never[]];
    

    你会得到

    类型“3”不能分配给类型“从不”。

    类型“4”不能分配给类型“从不”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 2011-05-30
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2020-03-11
      相关资源
      最近更新 更多