【问题标题】:Load collection of elements into a Tuple in Typescript将元素集合加载到 Typescript 中的元组中
【发布时间】:2017-02-05 20:22:12
【问题描述】:

我有一个Tuple,并试图用它来加载一个简单的数据值列表,这些数据值在TypeScript 中被强输入。但是我必须使用不正确,因为尝试添加多组强类型元素时我无法获得正确的语法。例如我有以下定义:

let sOptions: [number, string];
sOptions = [1, "Female"],[2, "Male"];

我也尝试过将Tuple 设为一个数组,但这也不起作用;它没有构建并说签名不匹配:

let sOptions: [number, string][];

是否可以根据元组对[number,string] 的定义在一个元组中加载多组数据(1...n),或者我是否错误地使用了这种类型并且会有更优选的方式?

【问题讨论】:

    标签: typescript tuples


    【解决方案1】:

    您实际上需要将sOptions 括在方括号中:

    let sOptions: [number, string][];
    sOptions = [ [1, "Female"], [2, "Male"] ];
    

    否则,TypeScript 中的 comma operator a,b 只会计算第二个操作数 b。这就是你得到签名不匹配的原因。

    【讨论】:

    • 就是这样,我已经尝试过了,但不是之前我将Tuple声明为array:S不错的地方。
    【解决方案2】:

    [number, string] 类型是大小为 2 的数组的类型,出于您的考虑,您可以考虑使用元组。我们称这种类型为YourTuple

    由于您希望 sOptions 包含一堆这些,因此它需要具有 Array<YourTuple> 类型(也写为 YourTuple[])。

    然后要将它们中的许多写入 sOptions 数组,您需要使用正确的数组语法,并在其后附加一个 [ ... ],如下所示:

    let sOptions: [number, string][];
    sOptions = [ [1, "Female"], [2, "Male"], [3, "Other"] ];
    

    顺便说一句,TypeScript 中对固定大小数组的支持有点糟糕,但正在变得越来越好,所以有时你可能仍然会遇到问题,它会忘记你的元组大小为 2 的事实。

    如果这是为了更复杂的事情,您可能需要考虑将元组转换为对象,其中包含指示组件含义的字段:

    interface NumberAndGender {
      number: number;
      gender: string;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2023-01-18
      • 2010-10-24
      • 1970-01-01
      相关资源
      最近更新 更多