Автогенерация типов Typescript
Изучаю тайпскрипт и делая очередную задачу, задумался. Есть такой объект
const obj = {
firstValue: {
type: 'string'
},
secondValue = {
type: 'boolean'
}
}
Такой просто объектик, и например какой то класс в который мы передаем этот объект, сразу напишу что у класса есть методы описывать я их не буду (если надо будет опишу) но по названию понятны :)
const myClass = new Class(obj)
// метод который вернет поле по ключу
class.getValue('firstValue')
И собственно вопрос! Можно ли сделать так, что бы в методе getValue мне не позволило взять что-то другое, чего нет в объекте который мы передаем, то есть я бы не смог взять thirdValue ну и знать его тип по полю type? Понимаю что можно сделать interface и описать его, но вот вопрос в том что хотелось бы динамически прокидывать подобные объекты.
Заранее спасибо за ответ!
P.S вообще не уверен возможно ли это, но я только учусь)
UPD: Пока писал вопрос ответил на свой вопрос, всем спасибо! Весь ответах был в дженериках
Ответы (1 шт):
Вот так. Пример содержит и getValue и setValue.
class GenericClass<T> {
obj: T;
constructor(payload: T) {
this.obj = payload;
}
getValue<K extends keyof T>(key: K) {
return this.obj[key];
};
setValue<K extends keyof T, P extends T[K]>(key: K, newValue: P) {
this.obj[key] = newValue;
};
}
const superObj = {
first: 1,
second: '2'
}
const superClass = new GenericClass(superObj);