在反应打字稿中,“字符串”类型不可分配给“从不”类型,“未知”类型不可分配给“从不”类型错误

时间:2021-05-11 06:20:03

标签: reactjs typescript function

我在 React Typescript 中有一个函数

const filter = (data: any) => {
    if (Array.isArray(data)) {
      const temp = data.reduce((r, v) => {
        v = filter(v);
        if (v !== "") r.push(v);
        return r;
      }, []);
      return temp.length ? temp : "";
    }
    if (data && typeof data === "object") {
      const temp = Object.entries(data).reduce((r, [k, v]) => {
        v = filter(v);
        if (v !== "") r.push([k, v]);
        return r;
      }, []);
      return temp.length ? Object.fromEntries(temp) : "";
    }
    return data;
  };

但在 if (v !== "") r.push([k, v]); 行中,我分别在 Type 'string' is not assignable to type 'never'.ts(2322)Type 'unknown' is not assignable to type 'never'.ts(2322) 中收到错误 kv,但我没有得到任何解决方案来修复这些问题。我是 Typescript 的新手。

1 个答案:

答案 0 :(得分:1)

Typescript 无法在您的 reduce 中找出正确的 r 类型,因此它假定它是 never[]。您可以通过自己指定正确的类型来解决这个问题。

const filter = (data: any) => {
  if (Array.isArray(data)) {
    const temp = data.reduce((r, v) => {
      v = filter(v);
      if (v !== "") r.push(v);
      return r;
    }, []);
    return temp.length ? temp : "";
  }
  if (data && typeof data === "object") {
    const temp = Object.entries(data).reduce((r, [k, v]) => {
      v = filter(v);
      if (v !== "") r.push([k, v]);
      return r;
    }, [] as [string, unknown][]);
    return temp.length ? Object.fromEntries(temp) : "";
  }
  return data;
};