#typescript
Вопрос:
Я пытаюсь создать сопоставленные типы для возврата производных классов, если они найдены (если не просто возвращают значение по умолчанию), я сделал это:
type MaybeDerivedAnimal<T extends string> = T extends keyof AllAnimals ? AllAnimals[T] : IAnimal;
type AllAnimals = {
Dog: IDog;
Cat: ICat;
// ...
};
Таким образом, я мог бы получить класс в такой функции, как эта:
const someAnimals = new Map<string, MaybeDerivedAnimal<any>>();
getAnimal<T extends string>(name: T): MaybeDerivedAnimal<T> | undefined {
return someAnimals.get(name)
}
dog = getAnimal("Dog");
dog.dogExclusiveFunction(); // <-- got typings for derived function
dog.generalAnimalFunction(); // <-- also for inherited function
Это сработало, но вот мой вопрос, хороший ли это способ сделать это?
кстати, мне помогла эта статья.