【发布时间】:2019-05-21 04:50:55
【问题描述】:
我正在尝试找到一种方法来告诉 TypeScript 的编译器一个值是(深呼吸)一个泛型类型的键,如果应用于该类型的对象,将产生一个属性具体类型。我知道这句话真的很混乱,所以这里有一个具体的例子。
const obj: T = an object of type T;
const key: KeysMatching<T, U> = a key that matches `typeof T[key] === U`;
const attribute = obj[key];
在这里,我希望 attribute 的类型为 U 或可分配给类型 U。
我受到 TypeScript 文档中提供的 Filter helper 的启发,尝试使用 this answer 中建议的类型,这似乎很适合我的情况(但显然不是),最后尝试创建自己的过滤某种类型的属性的助手:
type KeysMatching<T, U> = T[keyof T] extends U ? keyof T : never;
目前,使用我的自定义解决方案,attribute 的类型是 T[T[keyof T] extends U ? keyof T : never],它不能分配给 U。
有没有办法实现我想做的事情?
我试图给出一个可重现的最小案例,但如果您需要更多信息、上下文或真实案例示例,请随时提问!
提前感谢任何能给我一些想法或解决方案的人。
【问题讨论】:
-
这个泛型类型是在函数还是类的上下文中?
标签: typescript