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

时间:2019-07-15 09:48:53

标签: javascript reactjs typescript enums interface

我有一个String,我正在使用它来通过其键之一进行映射

DTO和SecurityMode枚举:

DTO
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>
        )}

1 个答案:

答案 0 :(得分:2)

  user.security[securityKey as SecurityMode]

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