Typescript 如何使用隐式键将对象文字声明为记录
如果在未声明类型的情况下创建常量对象文字,它将根据值推断键:Typescript 如何使用隐式键将对象文字声明为记录,typescript,Typescript,如果在未声明类型的情况下创建常量对象文字,它将根据值推断键: const OBJ = {foo: 42, bar: 42} 这将成为一条记录,这意味着IDE将有助于在键入OBJ.fo等时自动完成 如果同一对象是这样声明的: const OBJ: Record<string, number> = {foo: 42, bar: 42} 现在OBJ将成为记录,而不是记录 我想要声明一个字典,其中值的类型在声明中给出,但键是推断出来的 我找到的唯一方法是: 键入每个值 constobj=
const OBJ = {foo: 42, bar: 42}
这将成为一条记录
,这意味着IDE将有助于在键入OBJ.fo
等时自动完成
如果同一对象是这样声明的:
const OBJ: Record<string, number> = {foo: 42, bar: 42}
现在OBJ
将成为记录
,而不是记录
我想要声明一个字典,其中值的类型在声明中给出,但键是推断出来的
我找到的唯一方法是:
constobj={foo:A,bar:B};
type key='foo'|'bar';
const OBJ:Record={foo:A,bar:B};
是否有更好的方法,通过文本推断键,但在整个
记录上声明值?我不确定您使用的是哪个TypeScript版本。另外,您的示例有一个错误,您需要使用MyEnum.A
,而不仅仅是A
让我们看一下您的示例:
enum MyEnum {
A = 42,
B = 85
}
const OBJ = {foo: MyEnum.A, bar: MyEnum.B};
OBJ
的类型正确:{foo:MyEnum;bar:MyEnum;}
。在3.9>
typescript中测试
试穿
关于您的要求:
我想要声明一个字典,其中值的类型在声明中给出,但键是推断出来的
您可以使用来推断类型:
enum MyEnum {
A = 42,
B = 85
}
function fixType<T extends string>(value: Record<T, MyEnum>): Record<T, MyEnum> {
return value
}
const OBJ = fixType({foo: MyEnum.A, bar: MyEnum.B})
enum MyEnum{
A=42,
B=85
}
函数类型(值:记录):记录{
返回值
}
const OBJ=fixType({foo:MyEnum.A,bar:MyEnum.B})
现在,OBJ
具有记录
类型
试穿
如果您使用的是Enum
,您可能会对以下内容感兴趣。总之,即使您指定了枚举支持的数字,TS仍然允许分配任何数字
type Keys = 'foo' | 'bar';
const OBJ: Record<Keys, MyEnum> = {foo: A, bar: B};
enum MyEnum {
A = 42,
B = 85
}
const OBJ = {foo: MyEnum.A, bar: MyEnum.B};
enum MyEnum {
A = 42,
B = 85
}
function fixType<T extends string>(value: Record<T, MyEnum>): Record<T, MyEnum> {
return value
}
const OBJ = fixType({foo: MyEnum.A, bar: MyEnum.B})