【发布时间】:2026-02-15 05:25:05
【问题描述】:
我想创建一个类,它获取一个对象作为类型参数,然后将该类型用作该类中属性的类型,这样我只能设置和获取值,如果该键存在于该对象中。
我创建了一个接口,我们称之为 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]),但 typescript 说 key 必须是字符串或数字类型,所以这不能按预期工作。在我的界面中我想说的是,setFormField 的第二个参数也是 T[K]。 我也认为,我的类型定义是重复的。 Typescript 也希望我提供 seconds 参数,这对我来说很有意义,但我不想每次都在函数上编写 K extends keyof T,也不能将其用作属性类型。
尝试了很多安静,但无法让它工作..实际上我有点迷茫,因为我现在已经尝试了几个小时。以前从来没有用过仿制药,所以请对我温柔一点。 :D
希望有人能帮帮我。
【问题讨论】:
-
那么,您是否最希望像
Storage<T>这样的东西充当T类型的单个对象的包装器,您可以通过方法而不是点访问来获取和设置字段?我试图了解您希望Storage<T, K>中的K做什么。
标签: typescript generics web