typescript 类型“undefined”不能分配给类型“(number| null)[]'

smdnsysy  于 2023-05-23  发布在  TypeScript
关注(0)|答案(3)|浏览(478)

我有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;

但这并没有解决我的问题。
请问我该怎么解决这个问题?

ee7vknir

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]
lx0bsm1f

lx0bsm1f2#

如果值为valuesnullishundefinednull),values?.****将返回undefined。这就是为什么你得到undefined作为可能值的原因。
但是您的数据应该是(number | ScatterDataPoint | BubbleDataPoint | null)[]类型。所以你必须返回一个数组:

const data = values?.map((item: PointDTO) => item.y) ?? []
drkbr07n

drkbr07n3#

您可能需要指定变量是不可定义的:

let dataPoint: DataPoint | undefined;

相关问题