无法推断此地图的类型

2024-03-06

我一直在尝试定义类型TESTS打字稿中的对象如下,但仍然无法弄清楚任何内容。如果有人知道它的类型是什么,并且向我解释一下,因为我刚刚开始使用,那将非常有帮助ts。这是我正在谈论的对象:

const TESTS = [
   ['reminderEmail', new Map([  
     ['subject', { test: 'equal', expected: 'Kindly complete your setup' }],
     ['headers', new Map([
       ['X-Link', { test: 'equal', expected: 'someUrl' }],
       ['X-Template-Name', { test: 'equal', expected: 'reminderFirst' }],
       ['X-Template-Version', { test: 'equal', expected: 'someVersion' }],
     ])],
     ['html', [
       { test: 'include', expected: "Here's your reminder" },
       { test: 'include', expected: 'someUrl' },
       { test: 'include', expected: 'someUrl' },
       { test: 'include', expected: 'device' },
     ]],
     ['text', [
       { test: 'include', expected: "Here's your reminder" },
       { test: 'notInclude', expected: 'someUrl' },
       { test: 'notInclude', expected: 'someUrl' },
       { test: 'notInclude', expected: 'utm_source=email' },
     ]],
   ])],       
 ];

打字稿游乐场的链接是here https://www.typescriptlang.org/play?#code/MYewdgzgLgBAKgUQMpyTAvDA2gKBvrAcgCcBTAWwEswATU4hcgQ0oBtCAaGMUgdxgCyTAA4AKLPjz4ChCAFcARgCtSwKJxgBvGFFLQAXDEKkAjnKbsupAB7DVumocIBpajVYBPGKHLDWpXRgPEDliGAgAuWFCGABfAF0OKWkiAAtSJjpiCA0efiExXGliogANAFoAGWoAaw1tXQMjU3NLGBs7NVJHIwgQclIAVWJ2OMTkksIKuAo-Jl1ygDkmAfqdPSgnFosNDvtupzIqWnoAMUps9TGk4pSp8pnfVnnScoA1eghKcDXGzeazDsrLZ9j1ZP1SB9st8wDEEjdivEAJTjW5pKDkNpFW5adZNQjUYCsOR0XYgro9ABEAAl6KQAGQAYmsACYAOwAbggQRCYSObnolLiCNuDQ2TkJxNJwM6DicfQGw1GsRFxTF%20MlJNIZNlB16EKVcNV0nV-wJYCJWp1oKcdAAbpRgNrhRMYPFUZNdNZ1FxsaK8WbNdL2uS5TAaXTZDzQjB%20SdiEKVa78KanGAQFAAJIWqXamU2-WKkZG5O4v5pjPZy3BvYU%20UG4sunFl8VGdNZnNW-N1oxyDEAfT6oSd6AoLGVxvdIuRiWbeHiHKAA。在 javascript 中定义的相同对象工作得很好,但在打字稿中,抛出了一些我无法理解的错误。


这似乎是设计限制或打字中的错误the Map构造函数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/Map; see 微软/TypeScript#39133 https://github.com/microsoft/TypeScript/issues/39133有关类似问题的更多信息。目前当您拨打电话时new Map()编译器尝试将其与三个之一匹配超载 https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads;你经过的地方没有争论 https://github.com/microsoft/TypeScript/blob/8cdcec4454d0afe90cf67a6ecf2410d11c2f486c/lib/lib.es2015.collection.d.ts#L32,你传入一个条目数组 https://github.com/microsoft/TypeScript/blob/8cdcec4454d0afe90cf67a6ecf2410d11c2f486c/lib/lib.es2015.collection.d.ts#L33和一个你通过的地方general iterable条目数 https://github.com/microsoft/TypeScript/blob/main/lib/lib.es2015.iterable.d.ts#L160。后两个构造函数是generic https://www.typescriptlang.org/docs/handbook/2/generics.html在密钥类型中K和值类型V正在构建的地图。当数组或可迭代对象具有完全相同的一种类型的键和完全相同的一种类型的值时,就没有问题。但您遇到的限制是编译器无法自动推断K or V如果他们中的任何一个应该是union https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types type.

在你的情况下,关键类型是string,但值类型似乎是一个联合,这会导致编译器崩溃。看起来您有以下形式的基本值类型:

interface Test {
  test: 'equal' | 'include' | 'notInclude',
  expected: string;
};

Your Map将保存类型的值Test,但它也将保存值arrays或其他Maps那种类型的。也就是说,值类型看起来像一个递归定义的联合:

type TestValue = Test | Map<string, TestValue> | Array<TestValue>;

您可能有一些稍微不同的约束,但这是我根据示例的猜测。无论如何,一旦我们确定您的地图具有类型的键string和类型的值TestValue,那么我们可以manually指定K and V当我们调用泛型时Map构造函数,如new Map<string, TestValue>(...):

const TESTS = [
  ['reminderEmail', new Map<string, TestValue>([
    ['subject', { test: 'equal', expected: 'Kindly complete your setup' }],
    ['headers', new Map([
      ['X-Link', { test: 'equal', expected: 'someUrl' }],
      ['X-Template-Name', { test: 'equal', expected: 'reminderFirst' }],
      ['X-Template-Version', { test: 'equal', expected: 'someVersion' }],
    ])],
    ['html', [
      { test: 'include', expected: "Here&#x27;s your reminder" },
      { test: 'include', expected: 'someUrl' },
      { test: 'include', expected: 'someUrl' },
      { test: 'include', expected: 'device' },
    ]],
    ['text', [
      { test: 'include', expected: "Here's your reminder" },
      { test: 'notInclude', expected: 'someUrl' },
      { test: 'notInclude', expected: 'someUrl' },
      { test: 'notInclude', expected: 'utm_source=email' },
    ]],
  ])],
];

现在没有错误了。

Playground 代码链接 https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgCoQM5mQbwFDLKRYBcyA5BAI4CucANucgD4WgL00AmETr5IAPZgAkiA7deAGgLIIADwAOEBJC5ksUUAHMA3HgC++vGACeytJjAA1BjRQBeS1hbIAsnEUAeTTqnObOwgAPlcAQSgoOFMvdCxbThDjBEEQF1QAUQBlVCzkJwBtWQLyKAgAW1AeKAzyuGBGfxAIAHd3Tx8wLRBtfzjAxOCACiLCQhKMGgAjACsVMHJ-HCIrMkpaBkW5JXmIdQoAaSr6U2QU8sV6CEhkU0EaKGQMa5pFJgMAXRkx5BKACwgcGqGC2zTaHkUI1kPxKAA0ALQAGVAAGststiGA1tQ6I1tspVHs1hhBOUIABVKCMZCfb4-X7kBHoC70OCQeEAOTgZPRK1IFBxm38CgJajWZUqIGqADFgFAsO8vtCxnD4czLmyIPDrNAMMBUrzMdiNniRbt9uQSWSdfL9SBFXTCB8AJRKmHkP5gcp40b0jGrNjiTg8LZmwn7ABEAAloBAAGQAYnkACYAOy6DC3e6PCVVaARmmOsb+-nkdjB6T483E0kUqnvIuEEtYwMSEPCnbhmtkynUgyN3B8ltloOSUOdsUUHgAN2ASAbyo+bpV5Eg8gW-l9P2ba3LY47oqJyGjsctWYeyFzUvzheVTaHayEolH7arXYoVrrfYHO4oT7EbaVmGk6WrWvYLvSg5Gn+wgARW46HhaNBegA+iSDxIA4FT1N+i7Li6SofMYQA

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

无法推断此地图的类型 的相关文章

随机推荐

  • FCM 成功,但 Android 设备未收到通知

    当我尝试通过 cURL 请求发送推送通知时 服务器的响应表明我已成功 但设备上未收到消息 我已经尝试过使用多播和单接收者有效负载 这是我的 PHP 代码
  • Django:将“相同父级”约束应用于映射到自身的ManyToManyField

    我有一个模型 其中任务是一项工作 每项工作都可能依赖于一些其他任务的完成才能开始 任务被分组为作业 我想禁止作业之间的依赖关系 这是我的模型的相关子集 class Job models Model name models CharField
  • 设备显示设置(Android 屏幕缩放和字体)

    我的任务是与我们现有的 IOS 应用程序一起完成一个 Andoid 应用程序 Android 的项目框架已经存在 我只需要填补空白即可使其与 IOS 版本保持同步 我一直在通过自己的手机进行测试 并且一直在为 Galaxy S6 上的字体太
  • ReactJS:css 转换在 componentDidMount 中不起作用

    当 的时候EffectBox组件已安装 我想添加一个show class到这个组件 但是 css 过渡不起作用 这是js代码 var EffectBox React createClass componentDidMount functio
  • FC++ 是否被任何开源项目使用?

    The FC http www cc gatech edu yannis fc 库提供了一种有趣的方法来支持 C 中的函数式编程概念 一个简短的例子来自FAQ http www cc gatech edu yannis fc faq htm
  • 从 Pandas 中的过滤结果创建布尔掩码[重复]

    这个问题在这里已经有答案了 我知道如何在查询单列时创建掩码来过滤数据帧 import pandas as pd import datetime index pd date range 2013 1 1 periods 100 freq 30
  • Google Analytics - 跟踪多个网站(顶级域)

    我有 10 个顶级域名 例如example1 com example2 com example3 com 等 每个域都有自己独特的网站 不是重定向 我的目标是为所有 10 个网站拥有一个 Google Analytics 帐户和一个网络资产
  • 如何在 Java 中仅从月份和年份生成日期?

    我需要为信用卡到期日期生成一个新的 Date 对象 我只有一个月和一年 如何根据这两个生成日期 我需要尽可能最简单的方法 我在这里阅读了其他一些答案 但它们似乎都太复杂了 你可以使用java util Calendar Calendar c
  • 如何使用vba仅将单个工作表复制到另一个工作簿

    我有 1WorkBook SOURCE 包含大约 20 张 我只想将一张特定的工作表复制到另一张工作表Workbook TARGET 使用 Excel VBA 请注意 TARGET 工作簿尚不存在 它应该在运行时创建 使用的方法 1 Act
  • 将 jhipster 应用程序部署到不同的上下文路径

    我正在尝试使用 mvn 命令部署 jhipster 应用程序 我相信这将运行默认的 spring boot run 我认为这会部署到tomcat 服务器启动后 应用程序即可在http 本地主机 8080 http localhost 808
  • 如何确定 32 位 IEEE 浮点值中的集合 S 中有多少个整数 [重复]

    这个问题在这里已经有答案了 有人能给我解释一下它到底在说什么吗 我知道这基本上意味着它是单精度 具有 1 位符号 8 位指数和 23 位尾数 答案不应该是 2 2 8 2 2 23 吗 编辑 2 2 8 2 2 23 是否确定所有 32 位
  • Docker:向已创建的容器添加重启策略

    我看到 Docker 添加了一些称为重新启动策略的内容来处理容器的重新启动 例如重新启动 虽然这非常有用 但我发现重新启动策略命令只能与docker run并不是docker start 所以我的问题是 有什么方法可以将重新启动策略添加到过
  • 实体化滚动体

    我在设置时遇到问题tbody高度宽度overflow y scroll 我尝试过这个CSS table status sheet tbody min height 300px overflow y auto 这是我的表代码 div clas
  • 如何在 JavaScript 中给出变量引用?

    我想在javascript中给出变量引用 例如 我想做 a 1 b a a 2 且有b 2 并相应地改变为a 这在 JavaScript 中可能吗 如果不是 有没有办法像 a onchange function b a 那样 我想做的是创建
  • 在 React Native 和 Android 之间共享 Realm 实例

    我正在开发一个 React Native 项目 该项目使用 Realm for React Native 它工作没有问题 但现在 我面临着编写使用相同 Realm 实例的 Android 服务的问题 这可能吗 我该怎么做 我认为你可以通过以
  • 如何在 C# 中的泛型类型参数中使用 Switch...Case?

    我有一堂课正在使用Generic Type Parameter动态地使用它 现在 我正在使用if else这与我的自定义类配合得很好 我想知道我是否可以使用switch case here 如果数据类型是decimal or int那么我可
  • 在create-react-app中添加git信息

    在开发中 我希望能够从网络上查看构建信息 git 提交哈希 作者 最后提交消息等 我努力了 使用child process执行git命令行 并读取结果 由于浏览器环境不起作用 期间生成 buildInfo txt 文件npm build并从
  • Google App Engine - 请求在等待太长时间后被中止,无法尝试满足您的请求

    我有时会收到此错误 等待后请求也被中止 很长时间尝试为您服务 要求 这很可能表明 你已经达到了你的 同时动态请求限制 这几乎总是由于 您的应用程序中的延迟过高 请参见http code google com appengine docs q
  • 外部调用UI按钮

    回答 结果可以在这里看到 http apitecture com dev cked index 2 html http apitecture com dev cked index 2 html 工作代码摘录 a color on click
  • 无法推断此地图的类型

    我一直在尝试定义类型TESTS打字稿中的对象如下 但仍然无法弄清楚任何内容 如果有人知道它的类型是什么 并且向我解释一下 因为我刚刚开始使用 那将非常有帮助ts 这是我正在谈论的对象 const TESTS reminderEmail ne