鉴于此对象,有没有办法在确保键包含在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;
}
答案 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";
// }