TS2538 类型“未定义”不能用作索引类型。当检查分配给变量时

2024-01-07

我收到 TS 错误:

TypeScript 错误:类型“未定义”不能用作索引类型。 TS2538

对于这个简单的函数(根据提供的索引从数组获取对象):

const myArr: Array<object> = [{name: 'John'}, {name: 'Tom'}]

function getData(index?: number) {
    const isIndex : boolean = typeof index !== 'undefined';

    return isIndex ? myArr[index] : {};
}

对我来说更神秘的是,当我将其更改为:

function getData(index?: number) {
    return typeof index !== 'undefined' ? myArr[index] : {};
}

一切都像魅力一样 - 为什么?


由于代码流中的间接性,Typescript 将不会按预期执行代码分析。这是当用户定义的类型防护进来拯救世界。

function isUndefined(index: any): index is boolean {
    return typeof index === "undefined";
}

function getData(index?: number) {
    return isUndefined(index) ? {} : myArr[index];
}

因为索引是可选的getData方法,有可能会是undefined,你的第二种技术有效。

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

TS2538 类型“未定义”不能用作索引类型。当检查分配给变量时 的相关文章

  • JavaScript 相当于 htonl?

    对于 AJAX 请求 我需要发送一个幻数作为请求正文的前四个字节 首先是最高有效字节 以及请求正文中的其他几个 非常量 值 JavaScript 中是否有相当于 htonl 的东西 例如 给定 0x42656566 我需要生成字符串 Bee
  • 未捕获的语法错误:无法在“文档”上执行“querySelector”

  • 我可以在 javascript 中使用 php 吗?

    初学者的问题 我可以在 JavaScript 中使用 PHP 吗 例如在 jquery 中 triggers eq 1 post PHP 在服务器端执行 JavaScript 在客户端执行 但是你可以像这样打印 PHP 变量 trigger
  • 在 Bootstrap 中的悬停中打开折叠选项卡

    我在 Bootstrap 中有折叠面板 单击选项卡标题即可打开该面板 我试图弄清楚如何使用鼠标悬停在选项卡的总宽度上来打开 但我没有得到它 下面是默认关闭的单个选项卡的代码 div class panel panel default sty
  • Bootstrap 样式不适用于 Angular2 组件

    Bootstrap 样式不适用于 Angular2 组件 在以下 Angular2 组件中 它不能作为 ui 中的引导流体容器工作 如果我在带有 div 元素的组件内使用 container fluid 则会在作品中出现 例如 不工作 Co
  • Typescript 字符串文字联合类型

    我有一个类属性 其类型是多个字符串文字的联合 public reaction haha wow angry sad like 我想做的是将这些字符串定义在某种数组的其他位置 然后在属性定义中使用该数组 所以像这样 allowedString
  • 如何在javascript中获取表中复选框的值

    我需要获取表行中提供跨度的复选框的值 下面的代码是我的项目的一部分 HTML 代码用于动态我的表格 而 javascript 代码用于获取不适用于复选框的元素的值 它适用于其他输入元素 我的桌子 var html tr class rows
  • 在模式中重新加载内容(twitter bootstrap)

    我正在使用 twitter bootstrap 的模式弹出窗口 div class modal hide fade in div class modal header a class close a h3 Header h3 div div
  • 使用查询字符串使缓存失效,这是不好的做法吗?

    在我制作的网站上 我通常使用查询字符串参数使 CSS 和 JS 的缓存无效 如下所示 注意 这是 chrome 检查器的屏幕截图 这些查询字符串都是由我在渲染到浏览器中时制作的小系统自动附加的 一位朋友现在告诉我 使用查询字符串的缓存效果不
  • React Native 上无法识别的字体系列

    我在使用 React Native 时遇到了一个特殊的错误 在我的里面button js我在做 import Icon from react native vector icons MaterialIcons const icon Icon
  • 在打字稿中创建字符串文字联合类型时的字符串替换

    我有一个字符串文字联合类型 如下所示 type LowerCaseNames youku frame youku mini program tiktok frame 这只是一个例子 因为我的联合类型是一个包含 100 多个案例的列表 我需要
  • 在 1 级深度上翻转键值对

    我有对象 const pairs A D 1 2 3 B D 3 2 1 C D 4 3 2 1 B 0 1 2 3 我怎样才能让它翻转 const fliped D A 1 2 3 B 3 2 1 C 4 3 2 1 B C 0 1 2
  • Angular 8滚动到片段,不会将片段带到页面顶部

    我有一个链接 通过单击该链接 我想滚动到页面底部的片段 当我单击链接时 片段正在工作 但不会将其带到页面顶部 我尝试使用带有 id 的 div 和节来创建片段 但是 它不会将 div 或部分带到页面顶部 我的应用程序路由模块中的代码是 im
  • 硒元素不相互作用

    我开始使用selenium node js 到目前为止一切正常 突然相同的脚本抛出错误 未处理的承诺拒绝警告元素不可交互 我尝试设置等待 直到什么也没有
  • 在 Javascript 中访问对象属性

    我正在尝试访问电子邮件和密码字段 但我不知道在哪里 0 来了 我正在从 rethinkdb 检索对象 它看起来不错 没有 0 但后来我使用 Lodash assign 像这样的方法 var user new User var finduse
  • Next.js 切换 div 标签的显示

    Code export default function Header let showMe false function toggle showMe showMe return lt gt
  • 控制台日志不打印函数中的变量

    尝试将变量 randomWord 打印到console log 但chrome说它没有定义 看起来它是为我定义的 为什么它不会打印到console log function strt get random word from words a
  • 禁用 WebSocket 证书验证

    我需要禁用 WebSocket 的证书验证 因为我使用的是自签名证书 我在这个问题中发现Websocket SSL 连接 https stackoverflow com questions 30902547 websocket ssl co
  • 用javascript去掉未使用的小数

    我有一个货币输入 只需要返回有效数字 输入始终有两位小数 因此 4 00 gt 4 4 10 gt 4 1 4 01 gt 4 01 这是我目前正在做的事情 chop off unnecessary decimals if val char
  • 使用javascript在没有提交按钮的情况下将输入值显示到另一个页面

    我正在尝试将输入值的结果显示到另一个页面 但这个输入没有提交按钮 因此 我正在使用keyup来存储输入数据 我有2页 index1 php and index2 php 索引1 php

随机推荐

  • 如何检测 Racket Web 应用程序上的按键?

    我已经浏览了网络服务器的文档 但找不到任何内容 这是我的基本 Web 应用程序的代码 lang racket require web server servlet web server servlet env define test def
  • Mysql - 可视化 Web 开发人员 - 实体框架

    我遇到以下问题 我有 Visual Web Developer 2010 Express 我正在尝试让它与实体框架和 MySQL 数据库一起使用 我安装了 NET Connector for MySql 但它似乎没有与 Web Develo
  • 页面内容显示在侧边栏下方

    我正在创建一个带有侧边栏的 html 布局 但我的标题和内容出现了下我的侧边栏而不是旁边的 container position relative padding 10px top 0px right 0 left 0 height 120
  • 如何使用依赖于变量的模式执行 Javascript 匹配?

    目前的实施Remy Sharp 的 jQuery 标签建议插件 http remysharp com 2007 12 28 jquery tag suggestion 只检查标签开头的匹配项 例如 输入 Photoshop 将不会返回名为
  • CocoaAsyncSocket 的读写委托不触发&代码组织

    我正在尝试使用 cocoaasyncsocket 库附带的 echo 服务器示例的修改版本执行以下操作 1 打开与充当服务器的 python 脚本的连接2 发送数据 有效 但委托不触发3 接收返回数据 委托不会触发4 断开连接 没有断开连接
  • .NET 4 上的 WCF 流式文件传输

    我需要一个关于 WCF 流式文件传输的好例子 我找到了几个并尝试了它们 但是这些帖子很旧 而且我正在 net 4 和 IIS 7 上工作 所以存在一些问题 你能给我一个很好的 最新的例子吗 以下答案详细介绍了使用一些技术将二进制数据发布到静
  • 与后端同步集合更改

    我使用 Backbone js 并且有一组模型 该集合被检索并显示在前端 在前端 我希望用户删除新模型并将其添加到集合中 当用户完成并单击 保存 时 我希望更新整个集合 这意味着当单击 保存 时 集合会同步 以某种方式 添加的模型将被保存
  • Windows 10 中 NVM 的访问被拒绝问题

    当我在 Windows 10 中使用 nvm v 命令时 我收到 访问被拒绝 的消息 我在这里遇到了类似的问题NVM 被拒绝访问 https stackoverflow com questions 48762782 nvm is acces
  • 在 Elixir 单元测试中导入测试代码

    我正在编写一些与 SSH 交互的 Elixir 代码的测试 在我的测试中 我想启动一个可以运行代码的 SSH 服务器 我更愿意将此代码存储在测试目录中它自己的文件中 并通过各种不同的测试导入它 但我还没能让这个工作得很好 我尝试过创建一个t
  • C# 替换文件中的字符串

    替换 HTML 文件内容的一部分时 String Replace 似乎无法正常工作 例如 String Replace 替换 with blah blah blah html gt 请注意 第二个 HTML 结束标记未正确关闭 因此当用户在
  • 强制所有类在多级继承层次结构中实现/重写“纯虚拟”方法

    在C 中为什么pure virtual方法强制其强制覆盖only到它的直接子级 用于对象创建 但不到孙子级等等 struct B virtual void foo 0 struct D B virtual void foo struct D
  • 数据库磁盘映像格式错误或文件已加密或不是数据库

    我需要将没有 Root 的手机上的数据库复制到pad上 所以我也采用了像其他人一样的方法 首先将 data data databases test db复制到 sdcard 然后我使用在我的电脑或我朋友的电脑上使用adb shell sql
  • 反转 Jenkins 的一次一次哈希

    我将如何获取与返回的哈希匹配的任何可能的字符串值 我不想获取所使用的确切密钥 只想获取传递给函数时将返回未知密钥的相同哈希值的任何密钥 uint32 t jenkins one at a time hash const uint8 t ke
  • #warning 和 #error 作为宏

    有没有办法让宏在编译时强制出现警告和错误 我目前有这样的事情 if defined clang define PRAGMA x Pragma x elif defined GNUC define PRAGMA x Pragma x elif
  • 渲染动作渲染部分

    据我了解 两者之间有很大区别Html RenderPartial包含在 ASP NET MVC 版本和HTML RenderAction in the Microsoft Web Mvc ViewExtensions包含在 MVC 期货中
  • React 动态设置状态属性

    我正在使用 React 并且有一些方法可以单独设置组件的状态 我有以下方法 setLineColor value this setState stroke value gt this props data this getStyleData
  • 如何在 Xcode 4 上创建新的“模板”类别并在那里使用我自己的文件模板?

    我想开始为 iOS 应用程序使用我自己的模板 我不想要任何重大的改变 但更简单的事情 比如 添加 删除一些样板代码 添加一些pragma mark部分 对每个文件硬编码我公司的名称和一些注释 改变缩进 等等等等等等 我们的想法是 我们将在创
  • 在 Java 中列出文件(按修改日期排序)的最佳方法?

    我想获取目录中的文件列表 但我想对其进行排序 以使最旧的文件排在第一位 我的解决方案是调用 File listFiles 并根据 File lastModified 重新使用列表 但我想知道是否有更好的方法 编辑 按照建议 我当前的解决方案
  • 组织毡尖笔:使用 JS 通过相邻项目的相似性优化 2D 网格中项目的排列 [更新]

    UPD 该问题已更新具体细节和代码 请参见下文 警告 这个问题是关于优化矩阵中项目的排列 这不是比较颜色 最初 我决定提供有关我的问题的背景会有帮助 我现在对这个决定感到后悔 因为结果恰恰相反 关于颜色的无关紧要的讨论太多 而几乎没有关于实
  • TS2538 类型“未定义”不能用作索引类型。当检查分配给变量时

    我收到 TS 错误 TypeScript 错误 类型 未定义 不能用作索引类型 TS2538 对于这个简单的函数 根据提供的索引从数组获取对象 const myArr Array name John name Tom function ge