请看以下 TypeScript 代码。
很明显类型推断的行为就像注释中描述的那样。
现在问题是: 是否有可能以某种方式更改
据我所知,根据TypeScript的类型推断规则,这是绝对不可能的...但谁知道呢? 为了保险起见,我最好向TypeScript社区寻求帮助。谢谢。
现在问题是: 是否有可能以某种方式更改
type V2 =...
的定义,使其不再普遍推断为string
,而是推断为类型"someOtherValue"
?据我所知,根据TypeScript的类型推断规则,这是绝对不可能的...但谁知道呢? 为了保险起见,我最好向TypeScript社区寻求帮助。谢谢。
const config1 = { value: 'someValue' as const }
type K1 = keyof typeof config1 // type K1: "value" (not string in general)
type V1 = (typeof config1)['value'] // type V1: "someValue" (not string in general)
const config2 = { value: 'someOtherValue' }
type K2 = keyof typeof config2 // type K2: "value" (not string in general)
type V2 = (typeof config2)['value'] // type V2: string
TypeScript 游乐场:演示
as const
写在对象字面量后面而不是字符串本身后面,实际上是一个非常好的想法。在我的实际用例中 - 这比那个简单的例子要复杂一些;-) - 有一个函数,它以一个大的配置对象作为参数,我不想在某些特殊字符串后面写上几十次as const
...但如果我只在大的配置对象后面写上as const
,类型推断就会按预期工作。非常感谢你们,你们真的帮了我很大的忙 :-) - Natasha