Типизация функции обновления свойств объекта
подскажите как при помощи TypeScript типизировать функцию update, таким образом чтобы первым аргументом TypeScript подсказывал какие свойства есть, а вторым аргументом какой тип имеет выбранное свойство? Нашёл вариант с перегрузками, но он не очень подходит, так как потенциально свойств в объекте может быть любое количество, вот пример:
interface Data {
name: string,
age: number,
gender: 'man' | 'woman',
online: boolean,
file: File | null
}
const data: Data = {
name: 'Artem',
age: 29,
gender: 'man',
online: true,
file: null
}
function update(property: "name", value: string): void;
function update(property: "age", value: number): void;
function update(property: "gender", value: 'man' | 'woman'): void;
function update(property: "online", value: boolean): void;
function update(property: "file", value: File | null): void;
function update(property: keyof Data, value: Data[keyof Data]) {
data[property] = value
}
К тому же в строке data[property] = value TypeScript сообщает об ошибке
Тип "string | number | boolean | File | null" не может быть назначен для типа "never".
Подскажите какие ещё есть решения данной задачи ?
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
function update<T extends keyof Data>(property: T, value: Data[T]) {
data[property] = value;
}
и перегрузки функции update вам не понадобятся