无法定义元组的类型:目标需要 2 个元素,但源可能更少

2023-12-26

我正在尝试填充一个由元组组成的数组

const countries = ['sg', 'my', 'th'];
const platforms = ['ios', 'android'];

const combinationsToQuery = platforms.flatMap((platform) =>
    countries.map((cid) => [platform, cid])
); // [["ios", "sg"], ["ios", "my"], ["ios", "th"], ["android", "sg"], ["android", "my"], ["android", "th"]]

现在我正在尝试向它们添加一些类型,下面是我的尝试

type country = 'sg' | 'my' | 'th' | 'uk' | 'us'
type platform = 'ios' | 'android'

const countries: country[] = ['sg', 'my'];
const platforms: platform[] = ['ios', 'android'];

const combinationsToQuery: [platform, country][] = platforms.flatMap((platform) =>
    countries.map((cid: country) => [platform, cid])
);

类型“(国家|平台)[][]”不可分配给类型“[平台,国家/地区][]”。 类型“(国家/地区 | 平台)[]”不可分配给类型“[平台,国家/地区]”。 目标需要 2 个元素,但源可能更少。(2322)

如果我不具体定义[platform, country][], TS 将推断combinationsToQuery to be (country | platform)[][],这听起来也不对吗?


如果您查看返回类型,问题会变得更加明显.map打回来。如果您将原始代码调整为:

countries.map((cid: country) => {
  const result = [platform, cid];
  return result;
})

Above, result键入为(country | platform)[] - not作为包含两个元素的元组,但作为其(任意数量)元素是的数组platform or country。 (因此,整个结果的类型combinationsToQuery也不对。)

您可以断言回调返回的类型是元组:

const combinationsToQuery: [platform, country][]  = platforms.flatMap((platform) =>
    countries.map((cid) => [platform, cid] as [platform, country])
);

或者声明你的数组as const以及回调的返回值as const让 TypeScript 为你推断剩下的部分。

const countries = ['sg', 'my'] as const;
const platforms = ['ios', 'android'] as const;

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

无法定义元组的类型:目标需要 2 个元素,但源可能更少 的相关文章

  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 打字稿中枚举声明中的方括号的含义是什么?

    我正在浏览一个名为 Angular ngrx 项目的打字稿文件collection ts在那里 我看到声明了以下枚举常量 import Action from ngrx store import Book from models book
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 如何循环 Record

    I have Records类型Record https www typescriptlang org docs handbook utility types html recordkt export interface List name
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • 打开场景生成器时出错

    我正在使用 Javafx Eclipse 制作一个程序 当我使用场景生成器打开该程序时出现错误 这是错误 Opening the file with SceneBuilder failed Try setting the absolute
  • python导入cv2错误

    每当我尝试导入 cv2 时 我总是会收到此错误 import cv2 Traceback most recent call last File
  • R tryCatch 处理一种错误

    我想知道这是检查 tryCatch 函数类型的错误或警告的方法 例如在 Java 中 try driver findElement By xpath locator click result true catch Exception e i
  • yii2 上的多个数据库连接

    我正在尝试在 yii2 框架上使用多个数据库连接 在 config 文件夹内的 db php 文件下 我有这段代码 return class gt yii db Connection components gt db1 gt class g
  • 退出/完成应用程序/活动 - android

    我有 4 项活动说Act1 Act2 Act3 and Act4 Act1 中的按钮打开 Act2 Act2 中的按钮打开 Act3 Act3 中的按钮打开 Act4 我想要做两件事 我在第 4 幕中有一个按钮 将用户定向到第 1 幕 问题
  • 指向成员函数的指针作为全局函数的参数

    有这样的代码 void foo void fun ptr class B public B foo some fun void some fun 编译错误 error argument of type void B does not mat
  • 在家学习内核黑客和嵌入式开发? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我总是被内核黑客和嵌入式系统的世界所吸引 有没有人有关于开始搞乱这些东西的好教程 容易获得的硬件 诸如
  • Braintree - 自定义 - 在PaymentMethodReceived 上手动提交表单

    你好 很棒的互联网 我正在尝试实施 Braintree 付款 到目前为止一切都很好 我已经成功地实现了具有我自己的外观和感觉的自定义表单 一切都很好 现在 我正在添加对我提交的额外数据的验证 例如运输说明和其他好东西 为了进行验证 我读到我
  • Swing JButton:文本上方的图标

    如何在 Swing 中创建一个图标位于文本上方的 JButton 就这样做 button setVerticalTextPosition SwingConstants BOTTOM button setHorizontalTextPosit
  • 自定义 Twitter Bootstrap 网格不起作用

    我正在尝试制作一个 24 列网格 我计算了这个 网站宽度 997px 列数 24 列宽 31px 装订线宽度 11px 流体柱宽度 3 1093279839519 流体槽宽度 1 1033099297894 这应该可以工作 但是当我将其输入
  • Node.js console.log 与 console.info

    使用有什么好处console log vs console info 或者与此相关的任何其他控制台命令 console info info console error error console warn warn vs console l
  • 函数 registerForActivityResult 不存在

    我已经尝试了互联网上的所有解决方案来解决这个问题 但没有人工作 我正在使用依赖项 implementation androidx appcompat appcompat 1 3 0 beta01 implementation android
  • Nginx 反向代理配置

    我需要 nginx 来反向代理以下形式的 GET 和 POST 请求 myapp path to resource to http 127 0 0 1 9090 path to resource 我正在尝试以下操作 location mya
  • c相当于matlab的sind和cosd函数

    所以我正在将一些 matlab 代码手动转换为 c 代码 我只是想知道是否有一个 c 相当于我在 matlab 代码中看到的 sind 和 cosd 函数 我猜这会返回以度为单位的答案 而不是 c sin 和 cos 函数以弧度给出结果 我
  • Java JList remove() 方法抛出 ArrayOutOfBoundsException

    我正在使用显示正确的 JList 但是 我在从列表中删除元素时遇到问题 JList nameList new JList db getAllNames nameList setVisibleRowCount 6 nameList setFi
  • 寻找监视器与信号量的良好类比/示例

    监视器应该解决并发环境中的信号量问题 我正在寻找使用监视器与信号量的良好类比 请使用信息进行类比 4 个任务 任务S 任务 任务 任务S 1 个变量 varX 每个任务都想根据某个事件来操作varX 假设一群病人想要去看医生 信号量的实现是
  • 如何在 R 中直接显示路径视图图(而不是保存为文件)?

    这是一个示例 输出是一个 png 文件hsa04110 gse16873 png 我的问题是如何直接显示绘图而不是将其保存为文件 library pathview data gse16873 d data demo paths data p
  • 如何创建播放一次并冻结在最后一帧的 GIF 图像

    如何创建播放一次并冻结在最后一帧的 GIF 图像 我已经将循环属性设为1 所以第一个问题就解决了 但是动画结束后 gif 并没有冻结在最后一帧 而是回到第一帧 您需要将 gif 的循环计数更改为 1 这是一个在线工具 可以让您免费做到这一点
  • CActiveForm 和 ajaxSubmitButton 不起作用

    这是我的代码
  • 无法定义元组的类型:目标需要 2 个元素,但源可能更少

    我正在尝试填充一个由元组组成的数组 const countries sg my th const platforms ios android const combinationsToQuery platforms flatMap platf