TypeScript:使用字符串文字时的类型推断

TypeScript:使用字符串文字时的类型推断,typescript,typescript-typings,Typescript,Typescript Typings,请看一下下面的TypeScript代码。 很明显,类型推断的行为与注释中描述的类似 现在的问题是:是否有可能以某种方式更改类型V2=…的定义,即它推断为类型“someOtherValue”,而不再是一般意义上的字符串 就我所知,TypeScript的类型推断是绝对不可能的。。。但谁知道呢,也许我错了。 为了安全起见,我最好向TypeScript社区寻求帮助。谢谢 const config1={value:'someValue'作为const} 类型K1=typeof-config1//类型K1:

请看一下下面的TypeScript代码。 很明显,类型推断的行为与注释中描述的类似

现在的问题是:是否有可能以某种方式更改
类型V2=…
的定义,即它推断为类型
“someOtherValue”
,而不再是一般意义上的
字符串

就我所知,TypeScript的类型推断是绝对不可能的。。。但谁知道呢,也许我错了。 为了安全起见,我最好向TypeScript社区寻求帮助。谢谢

const config1={value:'someValue'作为const}
类型K1=typeof-config1//类型K1:“值”(一般不是字符串)
type V1=(typeof config1)['value']//type V1:“someValue”(通常不是字符串)
const config2={value:'someOtherValue'}
类型K2=typeof-config2//类型K2:“值”(一般不是字符串)
type V2=(typeof config2)['value']//type V2:string

TypeScript操场:

您还需要在总体上对
config2
进行强制转换
const

const config2={value:'someOtherValue'}作为const;
否则它总是字符串


使用密钥访问

const config1={value:'someValue'作为const}
类型K1=typeof-config1//类型K1:“值”(一般不是字符串)
type V1=(typeof config1)['value']//type V1:“someValue”(通常不是字符串)
const config2={value:'someOtherValue'}作为const;
类型K2=typeof-config2//类型K2:“值”(一般不是字符串)
type V2=(typeof config2)[K2]//type V2:“someOtherValue”
现在的问题是:是否有可能改变 类型V2=。。。在某种程度上,它推断键入“someOtherValue”并 一般情况下不再串了

。您可以按照@satanTime的建议将其应用于值prop或整个对象

为什么??因为typescript假定您可能会执行以下操作

const config2={value:'someOtherValue'}
config2.value=“有些不同”
通过应用const断言,类型检查器可以决定进行类型缩小

const config1={value:'someValue'作为const}
config1.value=“test”//Type“test”不可分配给类型“someValue”。
const config2={value:'someOtherValue'}作为const
config2.value=“test”//无法分配给“value”,因为它是只读属性。

@satanTime+@JózefPodlecki:将
写成const
不是在字符串本身之后,而是在对象文本之后,实际上是一个不错的主意。在我的实际用例中——比那个简单的例子要复杂一点;-)-有一个函数获取一个大的配置对象作为参数,我不想在一些特殊的字符串之后以常量写入
。。。但是,如果我只是在大型配置对象之后编写一次const
,类型推断就会按预期工作。非常感谢你们,你们真的帮了大忙:-)