Как определить тип объекта и назначить допустимый ключ в typescript?

#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. пожалуйста, приведите минимальный воспроизводимый пример