我有一个这样的enum:

export enum AccountSettings {
  accountManagement = "Account management",
  managementOfRelatives = 'Management of relatives',
}

然后我有一个en.json文件,我想将它们用于我的enum数据

{
  "account_management": "Account management",
  "management_of_relatives": "Management of relatives",
}

然后使用它得到错误:

import en from './en.json';

export enum AccountSettings {
  accountManagement = en.account_management, // shows Type 'string' is not assignable to type 'number'
  managementOfRelatives = 'Management of relatives',
}

如何使用en.json个数据进行enum?

推荐答案

不幸的是,您连续遇到了2个问题:

  1. Python导入的内容由TypScript"正常"判断,就好像您有正常的大变量 struct 一样.因此,属性value被视为string.对于.ts文件中的变量,我们可以使用as const assertion将整个 struct 标记为readonly并启用TS推断字面值.但目前这对于杨森导入的文件来说是不可能的,请参阅例如ms/TS#32063

  2. 即使在.ts文件中,TypScript也只有在定义为very simply时才会接受文字字符串值作为字符串枚举表示,例如在const变量值directly中;一旦它稍微复杂一点(例如,即使在readonly对象中),TS就会拒绝它,并有同样的错误:

const foo = "bar"
//    ^? "bar" literal string

enum EnumFoo {
    Foo = foo // Okay
}

const fooObj = {
    foo
    //^? "bar"
} as const // const assertion

enum EnumFooObj {
    Foo = fooObj.foo // Error
}

const bar = fooObj.foo
//    ^? "bar"

enum EnumBar {
    Foo = bar // Error
}

Playground Link

Javascript相关问答推荐

橡皮擦完全让画布变成白色

我在这个黑暗模式按钮上做错了什么?

传递一个大对象以在Express布局中呈现

判断表格单元格中是否存在文本框

在vercel throws上部署带有gunjs的sveltekit应用无法找到模块./' lib/文本编码'

如何使覆盖div与可水平滚动的父div相关?

使用useEffect,axios和useParams进行react测试

为什么!逗号和空格不会作为输出返回,如果它在参数上?

MathJax可以导入本地HTML文档使用的JS文件吗?

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

阿波罗返回的数据错误,但在网络判断器中是正确的

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

如何在coCos2d-x中更正此错误

不能将空字符串传递给cy.containes()

提交链接到AJAX数据结果的表单

在Matter.js中添加从点A到另一个约束的约束

从另一个数组中的对应行/键值对更新数组中的键值对对象

Reaction-SWR-无更新组件

Reaction useState和useLoaderData的组合使用引发无限循环错误

Firebase函数中的FireStore WHERE子句无法执行