【问题标题】:Check that array of tuples (2d array) has at least 1 item in Typescript检查元组数组(二维数组)在 Typescript 中是否至少有 1 项
【发布时间】:2020-12-06 19:48:50
【问题描述】:

我在我的 Typescript 变量声明中有一个简单的类型检查,以确保元组数组中的所有元素的长度都为 2 并且都是数字:

const testArea: [number, number][] = [[0, 0], [0, 220000], [220000, 220000], [220000, 0]];

这允许我正确初始化变量,但它仍然允许空数组:

const testArea: [number, number][] = []; // No error

我已尝试将其重写为:

const testArea: [[number, number]] = [[0, 0], [0, 220000], [220000, 220000], [220000, 0]]; // error: only allows a single tuple in the array

但这不适用于数组中许多元组的主要情况(尽管它似乎确实阻止了空数组的有效性)。

如何检查外部数组是否包含 [number, number] 类型的元组以及它是否包含至少 1 个这些元组?

【问题讨论】:

    标签: arrays typescript tuples


    【解决方案1】:

    你只需要使用rest操作符的小技巧

    type Tuple = [number, number]
    
    type NonEmptyArray<T> = [T, ...T[]];
    
    type Data = NonEmptyArray<Tuple>
    
    const data: Data = [] // error
    const data1: Data = [[]] // error
    const data2: Data = [[1]] // error
    const data2: Data = [[1,1]] // Ok
    

    有很多方法可以确保数组不为空,

    这是另一个:

    type NonEmptyArray2<T extends unknown[]> = T['length'] extends 0 ? never : T
    

    你可以看看@jcalz的回答here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      相关资源
      最近更新 更多