169 похожих чатов

Ребят, помогите с вопросом, он как бы по тайпскрипту, но

и по Вью, потому пишу сюда.
Как типизировать мутацию во vuex, изменяющую вложенные свойства объекта?
Предположим, у нас в сторе лежит
myDog = {
name: 'Blablovich',
color: 'black',
toys: {
favorite: [
'bone'
'ball'
],
usual: [
'annoying_squeaker'
]
}

И есть мутация, принимающая поля state, section, field
section - первый уровень вложенности (name, color, toys),
field - соответственно, второй (favorite, usual)

Мутация вызывается как для обновления данных в section - myDog[section] (к примеру, myDog.name),
так и для обновления field - myDog.toys.favorite

Как правильно типизировать такую мутацию?

такой вариант не работает:

type Toys = {
favorite: string[],
usual: string[],
}

type Dog = {
name: string,
color: string,
toys: Toys,
}

UPDATE_THE_DOG<
T extends Dog,
Key extends keyof T,
SubKey extends keyof T[Key],
>(state: AnimalState, { field, section, value }: {
field: SubKey,
section: Key,
value: T[Key][SubKey],
}): void {
const sectionObj = state.myDog[section]
sectionObj[field] = value
}
}

в гугле не смогла найти, вероятно, неправильно составляю запрос, или это невозможно?
суть в том, чтобы иметь возможность изменять как свойства на первом уровне вложенности, так и на уровень глубже

2 ответов

6 просмотров

Разбить на 2

Олекса Лелека 🐝- Автор вопроса

такс, разбиение разбиением, но при изменении вложенного объекта вопрос остался тем же: как правильно получить и указать типы свойств вложенного объекта? не зная точно, что там будет по примеру выше: нужно, чтобы можно было присвоить новое свойство, указав правильные типы для аргументов Key extends keyof Dog, SubKey extends keyof Dog[Key], >(state: AnimalState, { field, section, value }: { field: SubKey, section: Key, value: Dog[Key][SubKey], интересует строка: SubKey extends keyof T[Key], - получаю ошибку Type 'SubKey' cannot be used to index type 'string | number | boolean'. в то время как Key получаю корректные, туда подтягиваются все ключи объекта-родителя

Похожие вопросы

Обсуждают сегодня

$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
окей, дело реально в org было. но что за мусор в конце?
Vi Chapmann
15
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
Есть тут крутые SQL-маньяки (в частности postgresql)? Нужна помощь, совет, что-то всю голову сломал, не могу придумать как реализовать нужное. Есть вот такой набор данных: f...
Alex
11
здравствуйте. пытаюсь проверить, содержится ли в десятичном представлении инта некоторая цифра. совершаю: strstr(x, "5") != NULL) получаю ошибку с фото (заведомо неработающий ...
Катя Шевчук🪇
18
Что там вообще с кроссплатформенностью?
🄼🄰🄺🅉🄰🄸
23
Ребят, а вот такой вопрос: если я владелец бота анонимного чата, в котором, например, имеются подписки, используя какую-нибудь ЮКассу (или тому подобное, в общем с налогами, в...
Eugene Неелов
8
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
Карта сайта