#typescript
Вопрос:
Цель: Я хочу определить ключ объекта на основе типа этого объекта и использовать его позже для доступа и изменения этого свойства. Объект может быть одного из двух типов (один класс, один интерфейс), которые не имеют общих ключей. Типы значений в этих объектах могут быть либо строками, либо чем-то другим, хотя мой код изменит только определенное строковое свойство. Я не знаю, как объяснить TS, что в этом коде все в порядке 🙂 Хотелось бы услышать, есть ли у кого-нибудь решение этой проблемы.
Основная идея:
async func(object: TypeAInterface | TypeBClass) { let key; if (object instanceof TypeBClass) { key = 'keyB'; } else { key = 'keyA'; } const temp = object[key]; object[key] = ""; [...] functionTakingAString(temp); object[key]= temp; }
Что я пробовал:
let key: 'keyA' | 'keyB';
При этом он все равно будет жаловаться, что эти значения не существуют для обоих типов.
const temp = object[key as keyof typeof object];
При этом позже он будет жаловаться, что temp может не быть строкой.
if (object instanceof TypeBClass) { object = object as TypeBClass; key = 'keyB'; } else { object = object as TypeAInterface; key = 'keyA'; }
Похоже, это мало что дает.
Комментарии:
1. пожалуйста, приведите минимальный воспроизводимый пример