“未知”类型的参数不可分配给“{}”类型的参数

2023-12-28

这是我的代码

 const Res = await fetch(`https://foo0022.firebaseio.com/.json`);
        const ResObj = await Res.json();
        if (!Res.ok || !ResObj) { 
          throw new Error("Page Not Found 404");
        } 
        const ResArr = await Object.values(ResObj)
            .map(v => Object.values(v).flat())//error
            .flat()
            .filter(({ title }) => title.includes(Search))

在该行中,我收到此错误“.map (v => Object.values (v) .flat ())”,我收到此错误 Argument of type 'unknown' is not assignable to parameter of type '{}' .这个问题如何解决?


这里的问题是你需要帮助 TypeScript 理解你正在处理的对象的类型。这fetchAPI 无法提前知道返回对象的形状,因此您必须定义它并断言结果符合它。

看看有什么https://foo0022.firebaseio.com/.json https://foo0022.firebaseio.com/.json,我建议如下:

interface ResObj {
  Mens: {
    Hat: Clothing[];
    Jacket: Clothing[];
    Pants: Clothing[];
    Shoes: Clothing[];
    Suit: Clothing[];
  };
  New: Clothing[];
}
interface Clothing {
  agility: boolean[];
  alt: string;
  color: string[][];
  id: string;
  location?: string; // fix this
  Location?: string; // fix this
  material: string;
  price: string[][];
  prodState: string;
  saiz: string[][];
  shipping: string;
  sold: string;
  src: string[][];
  title: string;
  to: string;
}

当然,这是否准确取决于某种 API 文档。假设这是正确的,你可以更进一步:

  const Res = await fetch(`https://foo0022.firebaseio.com/.json`);
  const ResObj: ResObj | undefined = await Res.json();
  if (!Res.ok || !ResObj) {
    throw new Error("Page Not Found 404");
  }

Now ResObj将被称为类型ResObj你就可以开始操纵它了。一个问题是标准库的类型Object.values() https://github.com/microsoft/TypeScript/blob/v3.5.1/lib/lib.es2017.object.d.ts#L22-L32 and Array.prototype.flat() https://github.com/microsoft/TypeScript/blob/v3.5.1/lib/lib.es2019.array.d.ts#L152-L223不要反映你正在和他们一起做什么。我们可以为它们构建一些自定义类型...但在这种情况下,我将用类型匹配的新函数包装它们:

  // return an array of all object values...
  // if the object is already an array, the output is the same type.
  // otherwise it's the union of all the known property types
  function vals<T extends object>(
    arr: T
  ): Array<T extends Array<infer U> ? U : T[keyof T]> {
    return Object.values(arr); // need es2017 lib for this
  }

  // Flatten an array by one level... 
  function flat<T>(
    arr: Array<T>
  ): Array<Extract<T, any[]>[number] | Exclude<T, any[]>> {
    return arr.flat(); // need esnext lib for this
  }

如果您以前从未使用过 TypeScript,这些函数类型可能会令人困惑,特别是因为它们依赖于条件类型 https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#conditional-types梳理出数组属性。

然后我们可以像这样重写你的代码:

  const ResArr = flat(vals(ResObj).map(v => flat(vals(v)))).filter(
    ({ title }) => title.includes(Search)
  );

并且没有错误,并且编译器理解ResArr是一个数组Clothing对象。

链接到代码 https://typescript-play.js.org/#code/JYOwLgpgTgZghgYwgAgEoQM4HkBGArZAbwChlkBZCEDALiNLOQAk4w6BhAGwHswALUAHMA2gF0A3AzIApRAGsIbZF14CQIiVOQAFOOFrKe-IWMmNkAZT7dMHI2o1nGFgK7AlK4+tMMAvk4A5CAB3O1UTTV9iUEhYRBRPB3oyOEFgTncATzocbm5OCD0fFM4lDDAoIScEfO4oOnLK71Fi5GAAEwaKqoYeBFZgbhAAfi6mwXFkAHop5BhgAA9kYwwGABlufrBBkbGq6dn5pZWGAFtWaGA4Tj31JwAHSqRbjVbH7naLMAuXpww4YAALxeYlaGAE93uQl+DAw+U6yEaPTIGCgCBBLU0ZG2YAKMOx3BhUWIcAwmRACDmLgp2yGyHa3AAggAVBwACgshTRfBeAEpksgatQwGhMMgALzIODBAEimCKBB8NkAAz4YDA91oMxgeQADLqAEwGgB08ygEBwpIgg2NNVOU2NeDhIGVvOqQ3Kouw+Do6G9BAAPshqe0IPMQBB2hKpTL3F7Hc62W6GMAYMg2QBCP3G7hyZABoNZzC4PD8kjmfhQbjBZARmsAUSgVagbIARLpBCgArxkAAxbgh5AAFl1Q9bybIxLIMGpCFpIGQADdrhgADzM5AQBaQEDtDDIbj4CBzgB8bK0cCbdGZDF5dEZTbgmXXm+3VD3yAfUCfq9A8qgyAAKonsgwxAcg17CAomTcGmzKiCB5aMOaYAuFAC4lseYDGsunAuJgbK4RgboHLWECRpuGAGrqACMADsyAZDgcx1MsAirJODAzjSOxzJwrDrmeF5Xp+j7PsyJ63veYmrvW27fnO64ADRSiAmRiCewggC4pw4NAoj5sgckIHhobKap6kIYhWgoWhC6XlApr8WASaTDMZEUZgEbboxwDMTqAEnJxDBCp6fpftGMDOYRK5sn6Ja8sa5z3IREogVFrAxZwGCEbyeWJfMpTQOe5hsoQyzuAUyC+Py4ogTiBTGqAJkuKGOWcpeiq8rekhREAA

好的,希望有帮助;祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“未知”类型的参数不可分配给“{}”类型的参数 的相关文章

  • 如何使用 React 和 Jest 模拟 onPaste 事件?

    我正在尝试在我的反应项目上使用 JEST 测试来模拟粘贴事件 我有一个外部组件 App 其中包含带有 onPaste 事件的输入字段 我想测试过去的数据并检查输入值 it on past with small code gt Create
  • TypeScript 中的日期时间格式

    我想以 24 小时格式显示时间字符串 并认为在 TypeScript 中这会很容易 但由于某种原因 我无法将 Date toLocaleTimeString 与选项一起使用 知道为什么吗 它们在单独的接口定义中定义 interface Da
  • stripe.redirectToCheckout 参数:价格不是可接受的参数反应

    我在反应中的条纹结帐上遇到错误 我有一个按钮 单击它时 它应该重定向到条纹结帐页面 但是 我收到错误 Uncaught in promise IntegrationError Invalid stripe redirectToCheckou
  • React router + redux 导航回来不会调用 componentWillMount

    目前 我在容器组件的生命周期方法 componentWillMount 中预加载来自 api 的数据 componentWillMount const dept course this props routeParams this prop
  • 如何使用 Material UI 在应用栏下方打开下拉菜单?

    我是 Material UI 的新手 刚刚开始摆弄他们的带有菜单示例的应用栏 https mui com material ui react app bar app bar with menu 切换菜单下拉菜单时 它会在应用栏本身上方打开
  • 如何在React中使用material-UI在onFocus事件的Textfield中选择部分文本?

    我在反应应用程序中有一个带有材质 UI TextField 的模态表单 我有一个默认值 es 一个文件 加载元素时我只会选择文件名而不选择扩展名 我在标签 TextField 中执行了以下代码
  • 在 Angular 2 Typescript 应用程序中使用 moment.js

    我在 Angular 2 Typescript 应用程序中使用 moment js 库时遇到了困难 即使在阅读了答案之后这个问题 https stackoverflow com q 35166168 1031097我无法让它工作 这就是我到
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • 是否可以使用 TypeScript 对 jQuery.fn.extend 进行建模

    我的猜测是 答案是 否 但我想检查一下是否有我错过的东西 jQuery 有一个fn extend 方法 http api jquery com jQuery fn extend 它允许您使用额外的方法来扩充 jQuery 对象 以下是 AP
  • Nightmare.js 截图缓冲区长度 0

    我正在运行一个 night js 脚本 我试图在其中截取页面上多个元素的屏幕截图 The first元素被捕获得很好 但折叠下方的所有其他元素都以零长度捕获 我正在努力调试这个问题 任何帮助将非常感激 基本上这个脚本会遍历一个页面并选择al
  • 将 async 和await 与export const 一起使用

    我无法完成这项工作 它说 await 是一个保留字 是的 当然是 而且我想使用它 怎么了 export const loginWithToken async gt return dispatch gt dispatch type SESSI
  • nextjs/image 中属性“src”的类型不兼容

    我正在使用 React dropzone 在我的简单应用程序中上传多图像 为了显示要删除的图像类型 我使用 TypeScript 创建了一个单独的组件 但 Next js 图像 src 显示错误 如类型 src string alt str
  • CRA 的 src 之外的测试文件夹?

    我为我创建的应用程序编写测试npx create react app template typescript但我不知道如何将测试文件保存在组件旁边或单独的文件夹中test 我想我应该创造test文件夹外src src App tsx etc
  • Javascript 对象属性名称

    在 C 中 可以将对象属性的名称作为字符串值获取 名称 对象 Property gt myProperty 这可以在 Javascript Typescript 中完成吗 Object Keys 是我找到的唯一东西 但它给了我所有的键 示例
  • 如何在反应组件中使用聚合物组件?是否可以?

    我已经使用谷歌的聚合物来制作网络组件 但我也很有兴趣尝试一下 React 所以我想知道是否可以从反应组件的渲染函数内部使用聚合物组件 对的 这是可能的 我使用的方法有点复杂 但我很乐意分享 如果您已经使用过聚合物 则只需像使用任何其他聚合物
  • 使用函数重载进行解构

    我正在尝试创建一个函数 该函数需要一对坐标或一个对象x and y属性并返回邻居列表 但由于某种原因 即使我检查了它的类型 我也无法解构该对象 interface Coords x number y number public getNei
  • 从 Angular 6 中的 html 导出 Pdf

    我想从 Angular 6 中的 html 导出 pdf 所以 我正在使用jspdf图书馆 但我不能给出颜色和背景颜色等样式 我怎样才能实现这个目标 如果有其他免费图书馆jspdf 我可以用它 您可以从下面的链接查看演示 DEMO http
  • 为什么无论状态是对象还是字符串,React 重新渲染的方式都不同?

    下面的反应示例 userProfile状态是一个object 第一次渲染 状态是 第二次渲染 状态是res data gt 无限重新渲染 If userProfile更改为string e g useState with setUserPr
  • 在打字稿中获取类的键

    我有一个包含很多方法的类 我们称之为 myClass 我这样称呼它 myClass key 有没有办法从 key 获取可能的值 我希望有类似 keyof myClass 的东西 但我得到 myClass 引用一个值 但在这里被用作类型 问题
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on

随机推荐

  • 在 C# 中预览 PDF

    我正在寻找 NET GUI 组件 不同于PDFsharp http www pdfsharp net 允许预览 PDF 1 页文档 基本上我需要类似于 PictureBox 的东西 我可以在其中加载位图并显示它 如果该组件允许在内部缩放和移
  • SOAUI肥皂数字签名

    我需要在客户端中对肥皂消息进行数字签名 我已获得包含私钥和证书的 PEM 文件 我想用 SoapUI 进行测试 签名配置在传出 WS 安全配置中完成 请参见图片 同样 pem 在密钥库 证书选项卡中添加正常 但发送到服务的肥皂消息未签名 有
  • 从 python 调用 c++ 函数

    我试图从我的 Python 代码中调用 C 函数 如果我传递一个布尔值或一个int它工作得很好 但如果我发送一个字符串 它只打印第一个字符 我正在编译 g c fPIC foo cpp Wextra Wall o foo o g share
  • 如何获取产品组的关联产品?

    我正在循环访问产品结果 如果该产品是分组产品 我想获取该组中的所有产品 我正在这样做 products Mage getModel catalog product gt getCollection gt addAttributeToSele
  • @OneToMany 关系不会在子表中保存父级的主键

    假设存在三个 JPA 实体 APerson和两个一对多的关系 当我试图拯救那个人时AD P ID and AC P ID外键始终为空 这些字段的预期值是人员 ID 我究竟做错了什么 Person java 这包含与以下对象的一对多关系Acc
  • WebDriverWait 异常仅在 Visual Studio 2015 的调试模式下抛出

    我想知道其他人是否遇到过类似的问题或有使用 WebDriverWait 的经验 如果他们知道为什么我得到一个 NoSuchElementException 这似乎仅在调试模式下抛出 在正常运行时运行测试时 我不会抛出此错误 我也可以单击 继
  • 如何在不在“视图中”时卸载图像以节省内存?

    我有一个很长的图片库 我希望能够在移动设备上显示它们 而不会导致浏览器崩溃或导致滚动不稳定 有很多插件可以延迟加载图像 但是有没有什么可以在不在视图中时卸载图像以节省内存 这是 LinkedIn 工程团队博客文章中的引述iPad 版 Lin
  • 带有 Google Play 服务的 Appengine 上的 Oauth

    我在 Android 上使用 Google Play 服务来访问 Google API 和 Google 云端点 我还可以使用 Google Play 服务中的令牌访问 appengine User api 这可能吗 这里有一些示例代码li
  • 升级 Android 支持库 23.2.0 后出现代码分析错误(意外的命名空间前缀)

    我升级到Android支持库23 2 0并添加 vectorDrawables useSupportLibrary true 到我的 build gradle 这样我就可以为低于 21 的 api 提供矢量可绘制支持 请参阅here htt
  • 在实现接口中定义的没有 throws 子句的方法时,如何添加 throws Exception 子句?

    我需要一个类来在集合中导航 然后我实现了 Iterator 接口 但问题是 我的next 方法的实现需要抛出异常 因为集合成员需要动态生成 生成过程中可能会发生异常 next 抛出的唯一异常是 NoSuchElementException
  • LibreOffice 链接到外部数据

    I have a problem to import into LibreOffice an external csv 我按 确定 一切格式都正确 确定 按钮被禁用后 我无法继续 有什么建议吗 我有同样的问题 Calc 无法从外部数据源导入
  • 在 Web 表单中使用 URL 路由生成 URL

    我知道在 MVC 框架中 您有 Html 类来创建 URL Html ActionLink About us about home 但是如果您想在 Webforms 中生成 URL 怎么办 我还没有找到关于使用 Webforms 生成 UR
  • 当数据库表已填充JPA时如何正确设置@Id字段

    我的数据库中有一个表 并且我添加了 Id字段上的属性 作为strategy I use GenerationType IDENTITY 当数据库表尚未由 SQL 脚本中的行填充时 此方法可以正常工作 当表中已经有一些行时 如何设法让它工作
  • 为什么我的 rake 调用会导致“未定义方法‘source_index’”错误?

    我正在尝试跑步bundle exec rake db migrate然后遇到以下错误 bundle exec rake db migrate trace Invoke db migrate first time Invoke environ
  • Bootstrap.js 可以在 GAS(Google Apps 脚本)中使用吗?

    在 GAS 中 我想将 HTML 内容放置在选项卡中 就像此处描述 http getbootstrap com javascript tabs 我建立了一个工作原型这个jsFiddle http jsfiddle net 8g2xbm4c
  • 子控件的宽度应与父容器的宽度匹配

    我对 WPF 还很陌生 我经常发现自己很难让一堆子控件的组合宽度与给定的父容器相匹配 如下所示
  • 将标签绑定到“变量”

    假设我有一个名为 X 的全局变量 INT 由于 X 是全局变量 我们可以假设任何东西都可以修改它的值 因此每次都会更改它 假设我有一个名为 label 的标签控件 这就是我想要实现的目标 我想将 label Text 的值 绑定 到变量 X
  • IE9-10 中 SVG 压缩的背景大小

    我有一个带有背景图像的 div 集 div Play Video div 使用以下 CSS div background image url icon png background image url icon svg none backg
  • Scala 值类、用例

    I know value class在 scala 中 在编译时内联操作 也许像这样 case class A i Int extends AnyVal def that A A this i that i A 1 A 2 After co
  • “未知”类型的参数不可分配给“{}”类型的参数

    这是我的代码 const Res await fetch https foo0022 firebaseio com json const ResObj await Res json if Res ok ResObj throw new Er