首页 > 解决方案 > 类型“字符串”不可分配给类型“从不”并且类型“未知”不可分配给反应打字稿中的类型“从不”错误

问题描述

我在 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

标签: reactjstypescriptfunction

解决方案


Typescript 无法r在你的 reduce 中找出正确的类型,所以它假设它是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;
};

推荐阅读