如何约束对象的键但将值推断为const?

时间:2019-11-18 12:03:31

标签: typescript

鉴于此对象,有没有办法在确保键包含在const联合中的同时将其值推断为Field

type Field = 'name' | 'isHappy';

const fieldTypes: { [field in Field]: string } = {
  name: 'text',
  isHappy: 'checkbox',
};

我的目标是使fieldTypes具有以下类型:

{
  name: 'text';
  isHappy: 'checkbox';
}

代替

{
  name: string;
  isHappy: string;
}

1 个答案:

答案 0 :(得分:2)

不仅仅是变量声明。变量类型可以从分配的值推断出来,也可以由类型注释指定,​​没有中间立场。

您可以改为使用函数,该函数可以具有推断类型和约束类型:

type Field = 'name' | 'isHappy';

function createFields<T extends Record<Field, V>, V extends string>(o: T) {
  return o;
}

const fieldTypes = createFields({
  name: 'text',
  isHappy: 'checkbox',
})

// Typed as: 
// const fieldTypes: {
//     name: "text";
//     isHappy: "checkbox";
// }

Playground Link