作者回复: 1)第一个问题: enum Test { A = 'a', B = 'b' } type TestValue = keyof Record<Test, string> TestValue 就是你需要的value字面量联合类型,但是你会发现它就是Test本身,可以取 Test.A 或 Test.B,其实和取 'a' 或 'b' 没有本质区别。 2)第二个问题: function getKey(value: string) { let key: keyof typeof Test for (key in Test) { if (value === Test[key]) return key } return null }
作者回复: 常量不能改变的意思是,不能通过代码改变常量的值,但你可以修改定义常量的文件,而代码无需修改。
作者回复: 一般情况下把枚举当作常量来使用即可。课程中把枚举作为数据类型来讲,是想说明枚举、枚举成员和数字类型之间的兼容性问题,即枚举类型和数字类型是兼容的,枚举类型之间是不兼容的。
作者回复: 枚举基本不会这么用,一般直接引用Enum.A来使用。这里做这样的演示,只是为了说明枚举在类型兼容性方面的内部设计规则,理解一下即可。
作者回复: 枚举和number是类型兼容的,可相互赋值
作者回复: 主要用来定义一些常量,比如请求URL、文本提示信息、分类信息等等,这样方便记忆,减少硬编码,增加可读性。
作者回复: 可以把新增文件在 index.ts中 import 进来,不用修改配置文件
作者回复: 仍然存在硬编码
作者回复: 同一枚举类型的不同成员属于不同类型,但都与number类型兼容,所以它们可以被赋值number,但不能比较(因为类型永远不同,没有比较的必要)
作者回复: 是的,推断的类型是Month[],与number[]兼容