网站搜索

typescript - 类型 'undefined' 不能赋值给类型 '(number | null)[]'


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

但这并没有解决我的问题。

我该如何解决这个问题?

答案#1

假设以下这一行显示了错误:datasets: [{ data }], 你需要将示例的第一行改为以下内容:

const data = values?.map((item: PointDTO) => item.y).filter((y) => y !== undefined) ?? [];

变更说明:

  • 如果 values 变量被设置为 null,那么 data 最初将会被可选操作符赋值为 undefined。通过在末尾添加 ?? [] 可以解决这个问题,这会将结果默认为一个空数组。
  • 如果任何 item.y 属性是 undefined,data 最初会被赋值为一个包含 undefined 值的数组,如 [undefined, undefined, 1234, undefined]。通过 .filter((y) => y !== undefined) 可以修复这个问题,它会移除数组中所有的 undefined 条目,并将之前的结果更改为 [1234]。

答案#2

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

    let dataPoint: DataPoint | undefined;