TypeScript中如何定义非空数字数组?编译时拦截空数组赋值
如何在TypeScript中定义非空数字数组
你可以通过元组+剩余元素语法来定义必须至少包含一个数字的数组类型,这样赋值空数组时就会触发编译错误。
具体实现如下:
// 定义非空数字数组类型 type NonEmptyNumberArray = [number, ...number[]]; let array: NonEmptyNumberArray = [123]; // 合法,符合至少一个元素的要求 array = [5, 6]; // 合法,支持多个元素 array = []; // 编译错误:类型 '[]' 不能赋值给类型 'NonEmptyNumberArray'
原理说明
这个类型的核心是利用了TypeScript的元组特性:
- 元组的第一个位置
number强制要求数组必须至少有一个数字元素; - 后面的
...number[]是剩余元素语法,允许数组在第一个元素之后追加任意数量的额外数字,兼顾了普通数组的灵活性。
如果需要在运行时也确保数组非空(比如处理不确定来源的数据),可以配合类型守卫函数:
function isNonEmptyNumberArray(arr: number[]): arr is NonEmptyNumberArray { return arr.length > 0; } // 使用示例 const unknownArr: number[] = []; if (isNonEmptyNumberArray(unknownArr)) { // 这里unknownArr的类型会被推断为NonEmptyNumberArray console.log(unknownArr[0]); }
内容的提问来源于stack exchange,提问作者Nesh
相关产品推荐
相关产品推荐

