typescript - ¿Cómo restringir las claves de un objeto pero inferir los valores como const?
Dado este objeto, ¿existe una manera de inferir sus valores como const mientras se asegura que las claves estén contenidas en la unión Field?
type Field = 'name' | 'isHappy';
const fieldTypes: { [field in Field]: string } = {
name: 'text',
isHappy: 'checkbox',
};
Mi objetivo es que fieldTypes tenga el tipo:
{
name: 'text';
isHappy: 'checkbox';
}
en lugar de
{
name: string;
isHappy: string;
}
Respuesta #1
No solo una declaración de variable. Los tipos de variables se infieren a partir del valor asignado o se especifican mediante una anotación de tipo, no hay un punto intermedio.
En su lugar, puedes usar una función, que puede tener un tipo tanto inferido como restringido:
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";
// }
Enlace del parque
