Я хочу создать репозиторий, содержащий много разных моделей.Когда я получаю одну из моделей из репозитория, я хочу, чтобы машинопись набирала тип модели без необходимости вручную указывать, какой это тип.
export class Repository {
items = {};
add<T>(name: string, item: T) {
this.items[name] = item;
}
get(name: string) {
return this.items[name];
}
}
class BaseModel {
insert() {}
}
class ImageModel extends BaseModel {
displayImage() {}
}
class UserModel extends BaseModel {
doSomething() {}
}
class DataService {
repository: Repository = new Repository();
}
const service = new DataService();
service.repository.add<ImageModel>('image', new ImageModel());
service.repository.add<UserModel>('user', new UserModel());
const imageModel = <ImageModel>service.repository.get('image');
const userModel = <UserModel>service.repository.get('user');
imageModel.displayImage();
userModel.doSomething();
Прямо сейчас, при получении модели из репозитория Iскажем, например, что переменная imageModel
будет иметь тип ImageModel, а userModel
будет иметь тип UserModel.Есть ли способ, чтобы компилятор знал, что он имеет тип ImageModel и UserModel соответственно, без необходимости указывать его при получении из хранилища?Можно ли использовать дженерики и / или ключевое слово infer?