如何解决TypeScript中number[][]无法赋值给number[]的类型错误?
解决Type 'number[][]'无法赋值给'number[]'的问题
嘿,这个问题我之前也碰到过,咱们一步步来捋清楚原因和解决办法~
首先得搞明白为啥会报错:你用filter之后得到的是一个数组(哪怕只匹配到一个元素,那也是长度为1的数组),接着用map遍历这个数组,每个元素返回的是obj.values(也就是number[]类型),所以最终map的结果是number[][]——也就是“数组的数组”,但你的函数声明要返回的是number[],类型自然就不匹配啦!
给你两种靠谱的修复方案:
方案一:用find代替filter(更推荐)
既然你要找的是单个匹配key的对象,find比filter更贴合需求,它直接返回第一个匹配的对象(找不到就返回undefined),这样就能直接拿到对应的values数组了:
public getDefaultValues(key: string): number[]{ let options = [ { key: 'cl', values: [ 5000, 10000, 15000, 30000, 50000 ] } ]; // 找到第一个key匹配的对象 const matchedOption = options.find(obj => obj.key === key); // 有匹配就返回values,没有就返回空数组(符合返回类型要求) return matchedOption ? matchedOption.values : []; }
方案二:如果坚持用filter+map
要是你特别想用原来的组合,那可以取map结果的第一个元素,同时处理没匹配到的情况:
public getDefaultValues(key: string): number[]{ let options = [ { key: 'cl', values: [ 5000, 10000, 15000, 30000, 50000 ] } ]; const filteredValues = options .filter(obj => obj.key === key) .map(obj => obj.values); // 有匹配结果就取第一个数组,没有就返回空数组 return filteredValues.length > 0 ? filteredValues[0] : []; }
简单总结下:filter是用来筛选出符合条件的所有元素,返回数组;而find是找第一个符合条件的元素,返回单个对象。你的场景明显更适合用find,代码更简洁,类型也更贴合需求~
内容的提问来源于stack exchange,提问作者Jhonycage
相关产品推荐
相关产品推荐

