Во-первых, я должен отметить, что мне не разрешено иметь поля типа any , и во всех методах должен быть указан возвращаемый тип, и не более одного возвращаемого типа.
Я загружаю различные активы из файла JSON в разные компоненты. «Компонент» - это абстрактный класс, от которого наследуются другие классы. Каждый компонент содержит поля различных типов, например, положение: Vector2 и вращение: число.
export default class Transform extends Component {
private _position!: Vector2;
private _rotation!: number;
}
. Мне бы хотелось, чтобы каждый компонент запрашивал обобщенный c объект IRawData (из моей AssetLibrary), а затем извлекал необходимые данные из IRawData.
Я создал интерфейс IRawData:
export interface IRawData{
Convert<T>(): T
}
И тогда мои компоненты получат доступ к карте в AssetLibrary:
componentData: Map<string, IRawData>;
А вот класс NumberData, дополняющий IRawData
export class NumberData implements IRawData{
public dataNumber!: number;
constructor(dataNumber: number){
this.dataNumber = dataNumber;
}
Convert<T>(): T
{
let raw = this.dataNumber;
return raw;
};
}
При попытке присвоить this.dataNumber для raw я получаю сообщения об ошибках:
Тип 'номер' нельзя назначить типу 'T'.
'число' присваивается ограничению типа 'T', но экземпляр 'T' может быть создан с другим подтипом ограничения '{}'
Я хочу немедленно передать каждый новый актив из JSON в объект IRawData, поэтому я передаю число в конструкторе. Идея заключалась в том, что компоненты затем просто вызывали бы метод Convert (): T из объекта IRawData, который они получили из AssetLibrary, чтобы получить свои данные.
Я хотел бы знать, правильно ли я подхожу к этой проблеме. Существует ли определенный шаблон проектирования c, который можно использовать для передачи объектов, которые возвращают неопределенный тип, без использования типа any .