A 型不能分配给 B 型

时间:2021-07-02 09:21:51

标签: typescript

我有一个要转换为对象数组的 TSV 文件,这是我的代码:

代码

const handleFileConversion = (
  data: string, // the TSV file as text
  delimiter: string // "\t", a tab
): ParameterType[] => {
  const headers = data.slice(0, data.indexOf('\n')).split(delimiter);
  const rows = data.slice(data.indexOf('\n') + 1).split('\n');

  const headings = headers.map((header) => header.replace('\r', ''));

  const arr = rows.map((row) => {
    const values = row.split(delimiter);
    const parameter: ReducerObject = headings.reduce(reducerFunction(values), {});
    return parameter;
  });

  return arr;
};

const reducerFunction =
  (values: string[]) =>
  (object: object, header: string, index: number) => {
    if (header === 'factor') {
      const factors = values[index].split(';').map((num) => Number(num));
      object[header] = factors;
    } else {
      object[header] = values[index].replace('\r', '');
    }
    return object;
  };

type ReducerObject = {
  [key: string]: string | number[] | number;
};

type FlatRateOrPricePerPageType = {
  flatRate: number
  pricePerPage: ""
} | {
  flatRate: ""
  pricePerPage: number
};

export type ParameterType = {
  name: string,
  label: string,
  factor: [number, number, number, number],
  type: "checkbox" | "range" | "textField",
} & FlatRateOrPricePerPageType;

错误

Type 'ReducerObject[]' is not assignable to type 'ParameterType[]'.
  Type 'ReducerObject' is not assignable to type 'ParameterType'.
    Type 'ReducerObject' is not assignable to type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; } & { flatRate: ""; pricePerPage: number; }'.
      Type 'ReducerObject' is missing the following properties from type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; }': name, label, factor, type  TS2322

    50 |   });
    51 | 
  > 52 |   return arr;
       |   ^
    53 | };
    54 | 
    55 | const reducerFunction =

我知道它告诉我 RecuderObject 缺少四个键,但我将它们添加到函数中。如果我像这样使用 ParamaterType 而不是 ReducerObject

const parameter: ParameterType = headings.reduce(reducerFunction(values), {});

我收到以下错误:

Type '{}' is not assignable to type 'ParameterType'.
  Type '{}' is not assignable to type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; } & { flatRate: ""; pricePerPage: number; }'.
    Type '{}' is missing the following properties from type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; }': name, label, factor, type  TS2322

    46 |   const arr = rows.map((row) => {
    47 |     const values = row.split(delimiter);
  > 48 |     const parameter: ParameterType = headings.reduce(reducerFunction(values), {});
       |           ^
    49 |     return parameter;
    50 |   });
    51 |

并将其添加为 .reduce() 的第二个参数也不能解决此问题:

{
      name: '',
      label: '',
      factor: [0, 0, 0, 0],
      type: '',
}

0 个答案:

没有答案
相关问题