在globals.ts中,我有:
export const Roles = { Manager: 2, "Customer Service": 4 }
const r = Roles["Customer Service"]; // ok
在使用文件中,我有:
import { Roles } from "./globals";
const m = Roles.Manager; // ok
const M = Roles["Manager"]; // ok
const r = Roles["Customer Service"]; // not ok
最后一行给出:
元素隐式地具有“ any”类型,因为类型为'{Manager:number; “客户服务”:号码; ...”没有索引签名。
为什么不允许这样做?如何使用带有空格的键引用元素?
答案 0 :(得分:0)
我怀疑在您的实际代码中,该属性是从某些非常量变量中键入的。对于node_modules
,这将产生相同的错误。
noImplicitAny
您需要将let key = "Customer Service"; // type string
const r = Roles[key]; // error
的名称限制为该类型的实际键。
key
否则,文字let key: keyof typeof Roles = "Customer Service"; // type "Manager"|"Customer Service"
const r = Roles[key]; // ok
应该满足键类型,并且应该没有错误。