i18next:在 TypeScript 中映射对象数组

2023-12-21

我正在将 React 项目重写为 TypeScript。

软件包:Next.js、next-i18next、styled-components

EDIT:

截至目前,答案已过时next-i18next版本。

请参阅:Typescript i18next 不满足约束 'string |模板字符串数组 NextJS https://stackoverflow.com/questions/69225989/typescript-i18next-does-not-satisfy-the-constraint-string-templatestringsarra

简单示例:

{t<string, ItemProps[]>('document.items', {returnObjects: true}).map(({ name, description, index }) => (
  <li key={index}>
    <strong dangerouslySetInnerHTML={{__html: name}} />
    <Paragraph dangerouslySetInnerHTML={{__html: description}} />
  </li>
   )
)}

我还做了一个代码沙箱 https://codesandbox.io/s/react-i18next-typescript-array-example-5xdzk?file=/pages/index.tsx对于这个解决方案。

原问题:

我在语言 json 文件中使用了对象数组:

{
  "websites":
  [
    {
      "slug": "website-a",
      "name": "Website A"
    },
    {
      "slug": "website-b",
      "name": "Website B"
    }
  ]
}

用 i18next 列出所有这些{ t }:

t('websites', {returnObjects: true}).map(({slug, name}) => ( ... ))

带下划线的 TypeScriptmap:

Property 'map' does not exist on type 'string'.

用 TypeScript 重写:

type websiteProps = {
  map: Function;
};

type itemProps = {
  slug: string;
  name: string;
};

t<websiteProps>('websites', {returnObjects: true}).map(({slug, name}: itemProps) => ( ... ))

这有效,但我想知道我是否只是“添加”下划线.map。 我还能做些什么更好的事情吗?

谢谢你!


@cherryblossom 的答案是正确的 - 我将作为新答案发布以帮助提供更多详细信息。

这是基本 i18n t 函数的类型定义(由您的代码使用):

  <
    TResult extends TFunctionResult = string,
    TKeys extends TFunctionKeys = string,
    TInterpolationMap extends object = StringMap
  >(
    key: TKeys | TKeys[],
    options?: TOptions<TInterpolationMap> | string,
  ): TResult;

它是一个通用函数,可以使用 TResult、Tkeys 和 TInterpolationMap 作为选项。 正如我们所看到的,当不带任何类型参数调用时,TResult 默认为“string”。

字符串类型没有 .map 函数,因此会出现错误。

由于您确定应该返回一个项目数组,因此您需要显式指定 TResult 类型参数,如 @cherryblossom 所示:

t<itemProps[]>('websites', {returnObjects: true}).map(...)

顺便说一句,在解决此类问题时,您正在使用的库的类型定义非常有用。对于此类情况,请务必首先检查。

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

i18next:在 TypeScript 中映射对象数组 的相关文章

  • 尝试使用 ui-router 让一个子视图调用另一个子视图

    我有两个子视图 一个用于类别 一个用于产品 因此是该类别的产品 我希望用户能够选择一个类别并查看该类别的所有产品 所以我在类别控制器中调用一个函数View单击类别行上的按钮 这是函数 self scope viewSalonProducts
  • Angular:扩展服务和传递参数

    我很难理解如何在 Angular 中扩展服务 我有一个连接到 Firebase 并执行各种常见任务 获取 设置 更新 列表等 的服务 我没有为我的特殊组件重写它 而是尝试扩展它 我的想法是我可以只传递路径的新部分 但这会引发错误 Canno
  • 安装 npm 包时无法解决依赖关系树错误

    当尝试使用安装 npm 包时npm i命令 我收到以下异常 我尝试重新安装 Node js 包并使用以下命令将代理设置为关闭 set HTTP PROXY set HTTPS PROXY 问题仍然存在 我做错了什么 Update 当我运行以
  • 如何使用语言服务器协议将 TS 解析为符号?

    我是这个主题的新手 所以我很可能弄错了一些关键术语 我想将打字稿文件解析为其组件符号 举一个我想象的非常粗略的例子 请参见下文 some ts file export function yell output string alert ou
  • 即使 WebPack 构建工作正常,VS Code 显示未找到模块

    我的 VS Code 说它找不到导入 即使我的 WebPack 构建仍然有效 这是进口 import as tf from tensorflow tfjs 以及来自 VS Code 的消息 找不到模块 tensorflow tfjs 您的意
  • 如何模拟 typeORM 的 getCustomRepository

    我想对一个在其构造函数中使用 getCustomRepository 的类进行单元测试 但我只是想不出一种简单的方法来模拟它 这是我的班级代码 import getCustomRepository from typeorm export c
  • 如何在没有模块的情况下在 vue 中使用 TypeScript

    In package json I have devDependencies vue 2 5 16 这给了我index d ts vue d ts and so on https github com vuejs vue tree v2 5
  • 在 Angular2 (TS) 中导入模块的选项

    我知道有一些进展或至少有计划 5093 https github com Microsoft TypeScript issues 5039 5728 https github com Microsoft TypeScript pull 57
  • 如何在 TypeScript 中声明私有抽象方法?

    如何在 TypeScript 中正确定义私有抽象方法 这是一个简单的代码 abstract class Fruit name string constructor name string this name name abstract pr
  • 从字符串变量导入模块

    我需要从内存变量导入 JavaScript 模块 我知道这可以使用SystemJS and Webpack 但我找不到一个好的工作示例或文档 文档主要讨论 js 文件的动态导入 基本上我需要像下面这样导入模块 let moduleData
  • TypeScript 源映射文件不适用于 Chrome

    我正在尝试在 Chrome 中进行 TypeScript 源调试 但遇到了两个特定且可能相关的问题 第一个是由 TypeScript WebEssentials 编译器生成的注释 该注释应该标识源映射文件的位置 如下所示 sourceMap
  • 获取路由查询参数

    我正在尝试从 rc1 迁移到 rc4 但在获取查询字符串参数时遇到问题 ActivatedRoute 对象始终为空 英雄组件 ts import Component OnInit from angular core import Contr
  • 如何在 TypeScript 中输入这个“as”JSX 属性?

    我正在描述一个 React 库 它通过名为的属性获取组件或 HTML 标签名称as 当给出as属性 它根据该组件 标签名称创建一个元素 并传递任何其他给定的属性 这里有些例子
  • Angular 5 - 谷歌未定义(谷歌地图)

    我想在我的 Angular 5 应用程序上使用谷歌地图 但遇到了一些问题 加载视图时 我在 js 控制台中收到错误 LoginComponent Host ngfactory js sm 1 ERROR ReferenceError goo
  • 使用“class-validator”在 TypeScript 中确认密码

    今天 我试图弄清楚如何在应用程序的后端 NestJS 验证注册表单 我只是想知道是否存在一种验证方法password and passwordConfirm匹配 使用class validator包来构建自定义验证器或利用提供的验证器 我正
  • 在 Angular 2 Typescript 应用程序中使用 moment.js

    我在 Angular 2 Typescript 应用程序中使用 moment js 库时遇到了困难 即使在阅读了答案之后这个问题 https stackoverflow com q 35166168 1031097我无法让它工作 这就是我到
  • Nightmare.js 截图缓冲区长度 0

    我正在运行一个 night js 脚本 我试图在其中截取页面上多个元素的屏幕截图 The first元素被捕获得很好 但折叠下方的所有其他元素都以零长度捕获 我正在努力调试这个问题 任何帮助将非常感激 基本上这个脚本会遍历一个页面并选择al
  • Java 的 React Typescript API 类型 byte[] image/png

    我正在将其转换为我们的 React Web 应用程序的 Typescript 服务 下面是 Java 中的原始 API Typescript 响应数据类型是什么 斑点 GET Path vendorId Photo Produces ima
  • 如何让 Typescript 获取声明文件?

    My file src auth ManagementAPI ts使用 Auth0 我需要使用自己的声明文件并创建src types auth0 d ts 然而 当我跑步时ts node 我收到此错误 TSError Unable to c
  • 如何在 TypeScript 中使用 navigation.replace ?

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

随机推荐

  • 存储 Tf-idf 矩阵并更新 pandas 中新文章的现有矩阵

    我有一个带列的 pandas 数据框text由组成news articles 给出如下 text article1 article2 article3 article4 我计算了文章的 Tf IDF 值 from sklearn featu
  • 如何在 ASP.NET 中使用带有图标和格式的 JQuery Datepicker

    我想为我的文本框使用 jQuery 我想使用具有以下格式的日期选择器yyyy mm dd并带有一个图标
  • 将 RGB 颜色转换为 CMYK 颜色?

    我正在寻找一种将 RGB 颜色转换为 CMYK 颜色的算法 Photoshop 正在执行以下转换 R 220 G 233 乙 174 C 15 中号 0 Y 40 K 0 从 RGB 到 CMYK 的转换取决于用于铺设 CMYK 墨水的物理
  • java.net.SocketException 套接字已关闭

    我正在将客户端的对象发送到服务器 在服务器端修改该对象并将其重新发送到客户端 将对象从客户端发送到服务器是正常的 它可以正常工作 但是当我将对象发送回去时 它会给出异常套接字已关闭 这是代码 IntString 和 ParentObj 是我
  • Java中打印线程实例是什么意思?

    例如 System out println Thread currentThread gives Thread main 5 main main 5 main 指的是什么 我猜也许其中之一就是名字 但我想知道这一切的确切含义 来自 java
  • 使用 React Material-ui 更改 OutlinedInput 的大纲

    快速说明 这不是重复的如何更改 Material UI React 输入组件的轮廓颜色 https stackoverflow com questions 53764626 how to change outline color of ma
  • Archlinux pip 和 setuptools 未升级

    终端命令 python V output Python 3 5 2 我想pip and setuptools更新于pycharm但发生了这个错误 错误 找不到 python 打包工具 pip 建议的解决方案 尝试从系统终端运行此命令 确保您
  • 使用 nginx-Ingress 在 Kubernetes 中的集群外公开 TCP 端口

    所以我使用 Kubernetes 在 Google 云上设置了我的应用程序 我有一个 Pod 我想将其公开到需要 TCP 请求的集群之外 我开始知道这是可能的入口 nginx https github com kubernetes ingr
  • 如何在浮动操作按钮中添加边框

    我有一个带有全白色背景色调和图像源的浮动按钮 我想用灰色边框包围它 我找不到任何方法可以这样做 请帮忙 我刚刚创建了一个普通的 FAB 这是我的按钮的 XML 代码
  • 如何使用 git Shortlog 聚合单个目录中多个存储库的用户提交统计信息?

    我有一个目录 其中有很多 Git repo 子目录 我想积累类似的信息 git shortlog sne no merges 对于其中的所有存储库 按所有总提交对用户进行排序 例如 对于存储库 1 430 Author 1 lt email
  • Objective-C 中的构造函数

    我已经创建了 iPhone 应用程序 但遇到了问题 我有一个classViewController我在那里实施了我的程序 我必须分配 3NSMutableArray但我不想用图形方法来做 我的类没有像 Java 那样的构造函数吗 I wan
  • python,如何将模板透明图像与opencv匹配

    我使用 matchtemplate 来检测背景上的 67x45 正方形 我认为我的代码工作正常 没有任何问题 但问题是我必须设置高阈值才能成功检测 否则会给出很多错误检测 所以我尝试将方法更改为 cv2 TM CCOEFF NORMED 但
  • Hibernate 日期标准

    在 oracle 中我有格式的日期 2011 年 4 月 17 日 19 20 23 707000000 我想检索 2011 年 4 月 17 日的所有订单 SimpleDateFormat formatter new SimpleDate
  • Flutter,带有声明的 Late 关键字

    late TextEditingController controller TextEditingController late String someString someString TextEditingController cont
  • 如何使用 XCTest 在 Xcode 中测试 Swift 文件,而无需构建整个应用程序?

    我想做的是在对文件进行微小更改后经常测试 Swift 文件 该文件可能包含一个或多个结构和类 我不关心 应用程序 的概念 因为这纯粹是练习我学到的一些新概念的学术练习 我只想测试该文件 并不关心该应用程序以及与该应用程序相关的任何内容 你可
  • sed 替换命令在 Mac 上不起作用

    我尝试使用 sed 将 CMakelists txt 文件中的一些文本替换为 bash 变量的值 但出现错误 sed 1 s iPhone invalid command code sed命令 sed i s iPhone Develope
  • 如何获取两个日期之间的月份和年份列表

    我需要您的帮助来获取两个日期之间字符串中的月份和年份列表 用户将以字符串格式输入两个日期 String date1 JAN 2015 String date2 APR 2015 所以结果应该是 Jan 2015 FEB 2015 MAR 2
  • 在 GLSL 中获取向量的分量最大值

    我需要获得最大值vec3在 GLSL 中 目前我正在做 max max col r col g col b 有用 但我想知道是否有更好的方法通过一个内置函数调用来做到这一点 不幸的是 这就是你在 GLSL 中所能做的最好的事情 我已经习惯写
  • RedShift - 带换行符的 CSV 加载

    我试图在加载时加载 CSV 文件 但出现错误 分隔值缺少结束引号 CSV 文件错误行 红移错误 line number 13 colname Comment col length 250 raw line 123 123 xyz 2009
  • i18next:在 TypeScript 中映射对象数组

    我正在将 React 项目重写为 TypeScript 软件包 Next js next i18next styled components EDIT 截至目前 答案已过时next i18next版本 请参阅 Typescript i18n