我有TS抱怨这个代码:
const data = values?.map((item: PointDTO) => item.y);
const chartData: ChartData = {
labels,
datasets: [{ data }],
};
错误消息为:
Type '(number | undefined)[] | undefined' is not assignable to type '(number | ScatterDataPoint | BubbleDataPoint | null)[]'.
Type 'undefined' is not assignable to type '(number | null)[]'
所以我把代码改成了:
const data = values?.map((item: PointDTO) => item.y) ?? null;
但这并没有解决我的问题。
请问我该怎么解决这个问题?
3条答案
按热度按时间ee7vknir1#
假设下面的行显示错误:
datasets: [{ data }],
你需要将示例的第一行修改为以下内容:const data = values?.map((item: PointDTO) => item.y).filter((y) => y !== undefined) ?? [];
变更说明:
values
变量被设置为null-data
最初将由可选操作符分配给undefined
。这是通过在末尾添加?? []
来修复的,这将默认结果改为空数组。item.y
属性是undefined
,那么data
最初将被分配给一个包含未定义值的数组,如下所示[undefined, undefined, 1234, undefined]
。这是由.filter((y) => y !== undefined)
修复的,它从数组中删除任何未定义的条目,并将以前的结果更改为[1234]
。lx0bsm1f2#
如果值为
values
是nullish(undefined
或null
),values?.****
将返回undefined。这就是为什么你得到undefined
作为可能值的原因。但是您的数据应该是
(number | ScatterDataPoint | BubbleDataPoint | null)[]
类型。所以你必须返回一个数组:drkbr07n3#
您可能需要指定变量是不可定义的: