Typescipt 错误 Type ‘undefined’ must have a Symbol.iterator method that returns an iterator
当我们尝试使用带有可能未定义的值的扩展语法时,会发生“Type ‘undefined’ must have a Symbol.iterator method that returns an iterator”错误。 要解决此错误,需要在使用 spread 之前使用类型保护来验证该值是否为 undefined
。
下面是错误发生的一个示例。
type Years = number[] | undefined;
const arr1: Years = undefined;
// ⛔️ Error: Type 'undefined' must have a
// '[Symbol.iterator]()' method that returns an iterator.ts(2488)
const result = [...arr1];
arr1 变量可能具有未定义的值。
当我们使用问号将属性标记为可选时,通常会发生此错误。
当一个值是可选的时,它可能等于未定义。
由于我们不能使用未定义值的扩展语法 (...)
,因此我们可以提供空数组作为默认值。
type Years = number[] | undefined;
const arr1: Years = Math.random() > 0.5 ? [2022, 2023] : undefined;
const result = [...(arr1 || [])];
console.log(result);
我们使用逻辑 OR (||) 运算符来提供备用,以防 arr1 变量存储未定义的值。
现在我们可以保证将扩展语法与数组一起使用。
我们也可以使用三元运算符来获得相同的结果。
type Years = number[] | undefined;
const arr1: Years = Math.random() > 0.5 ? [2022, 2023] : undefined;
const result = [...(arr1 !== undefined ? arr1 : [])];
console.log(result);
我们使用三元运算符来检查 arr1 是否不存储未定义的值。
如果不是,我们传递 arr1 数组,否则提供一个空数组的后备值。
使用逻辑 OR (||)
运算符和这个三元之间的区别是 – 三元更明确,直接检查 undefined
。
如果左边的值是假的,则逻辑 OR (||)
运算符返回右边的值。
我们还可以在初始化变量时提供默认值。
type Years = number[] | undefined;
const arr1: Years = undefined || []; // 空数组作为默认值
const result = [...arr1];
console.log(result);
我们在初始化 arr1 变量时提供了一个空数组的默认值。
这样,TypeScript 可以确保变量将存储一个数组,并且可以安全地将其解压缩到结果数组中。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。