Я хочу создать класс, который получает объект в качестве параметра типа, а затем использует тип в качестве типа свойства в этом классе, чтобы я мог устанавливать и получать значения, только если этот ключ существует в этом объекте.
Я создаю интерфейс, назовем его IStorage.Класс Storage должен реализовывать iStorage и хранить значения в зависимости от того, существует ли ключ в данном объекте.
interface iStorage<T, K extends keyof T> {
getField(k: K): T[K];
setField(k: K, v: string | number | object): T[K];
render(): void;
}
class Storage<T, K extends keyof T> implements iStorage<T, K> {
private fields: { [key: K]: string | number | object };
public getField(k: K): T[k] {
return this.fields[k];
}
public setField(k: K, v: string | number | object): T[k] {
return (this.fields[k] = v);
}
}
let storage = new Storage<{name: string, type: number}>();
Я хочу, чтобы поля в Storage соответствовали общему определению (я думаю, T [K]), номашинописный текст говорит, что ключ должен иметь тип string или number, поэтому он не работает должным образом.В своем интерфейсе я бы хотел сказать, что вторым параметром setFormField также является T [K].Я также думаю, что мое определение типа повторяется.Typescript хочет, чтобы я также приводил аргумент секунд, что имеет смысл для меня, но я не хочу писать, что K расширяет keyof T каждый раз для функции, и при этом я не могу использовать его как тип свойства.
Много пробовал тихо, но не смог заставить его работать .. Я немного растерялся, так как пытаюсь это уже несколько часов.Никогда раньше не имел дела с дженериками, поэтому, пожалуйста, будьте осторожны со мной.: D
Надеюсь, кто-нибудь может мне помочь.