Как изменить значение JSONValue?
Мой код:
type JSONValue =
| string
| number
| boolean
| { [x: string]: JSONValue }
| Array<JSONValue>;
interface Data {
name: string;
values: JSONValue;
}
const d: Data = {
name: "John",
values: {"first": 1, "second": 2}
}
Я хотел бы изменить "первое" значение:
d.values["first"] = 2;
но это возвращает мне ошибку:
Элемент неявно имеет тип «любой», поскольку выражение типа «первый» не может использоваться для индексирования типа «JSONValue». Свойство first не существует для типа JSONValue.
@evolutionxbox Это значение текста JSON, поэтому имя подходит.
Кстати, ваш JSONType союз отсутствует null



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


TypeScript жалуется на присвоение, потому что не знает, что вы сохранили объект в d.values. Согласно вашему объявлению типа, это может быть массив, строка, число или логическое значение, и присвоение им .first не допускается.
Если вы хотите сказать TypeScript «но я знаю, что это (в настоящее время) объект», вы можете использовать утверждение типа:
(d.values as { [x: string]: JSONValue })["first"] = 2;
Если вы хотите сообщить TypeScript, что data.values всегда является объектом, который может содержать произвольные свойства, измените определение вашего интерфейса Data:
interface Data {
name: string;
values: { [x: string]: JSONValue };
}
Если вы на самом деле не уверены сами, сначала проверьте тип, прежде чем назначать:
if (typeof d.values == 'object' && !Array.isArray(d.values)) {
d.values["first"] = 2;
}
Подумайте о том, чтобы не вызывать тип
JSONValue, так как JSON всегда является строкой.