javascript - TS |元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 'Record<SecurityMode, boolean>'

标签 javascript reactjs typescript enums interface

我有一个 DTO,我正在使用它来映射它的一个键

DTO 和 SecurityMode 枚举:

enum SecurityMode {
  mode1 = 'mode1’,
  mode2 = 'mode2’,
  mode3 = 'mode3’
}

export default SecurityMode;
import SecurityMode from 'shared/common/enums/SecurityMode';

export default interface IAuthUser {
  security: Record<SecurityMode, boolean>;
}

错误:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Record<SecurityMode, boolean>'.
  No index signature with a parameter of type 'string' was found on type 'Record<SecurityMode, boolean>'.ts(7053)

这是代码的一部分,错误呈现:

{user && user.security && user.security[securityKey] && ( // The error is on user.security[securityKey]
          <Fragment>
            <span">{securityKey}</span>
          </Fragment>
        )}

那么,我该如何消除这个错误呢?他的问题是什么?

我尝试将安全性更改为:

security: Record<{[key: string]: SecurityMode, boolean}>

但是 Record Generic 只接受 2 个参数,当我将它们放入 var 时,我知道我正在使用它们作为值。请帮助..

最佳答案

  user.security[securityKey as SecurityMode]

问题不在于 user.security 的类型,而在于 securityKey 的类型,因为它可以是任何字符串,也可以是不属于 的字符串用户安全。由于 undefined/false 在这里具有相同的含义(我假设),将字符串转换为字符串文字联合类型是安全的,然后错误应该消失。

关于javascript - TS |元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 'Record<SecurityMode, boolean>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037188/

相关文章:

javascript - 基于可观察变量的带有时间参数的setInterval

reactjs - 如何使用 jest-sonar-reporter?

javascript - 单击时 Bootstrap Accordion 不展开

reactjs - react - 类型错误 : Cannot read property 'img' of undefined

typescript - Nrwl/Nx - 如何构建单个 js 文件可由浏览器使用并捆绑依赖项

node.js - 在 angular2 组件中需要 Node 模块

javascript - 访问 getTooltipText(e) 事件中的数据行?

javascript:如何根据数据库值判断字段值是空字符串还是null

javascript - 按键/值合并对象数组

javascript - 如何根据字段名而不是字段值从Rethinkdb表中获取数据