【发布时间】:2021-05-21 23:01:12
【问题描述】:
是否可以以通用方式推断私有成员的类型?
有这个课程:
class Dummy {
private num: number; // I want to get the type of this: number
str: string; // control group
}
我可以手动获取num字段的类型:
type DummyNumTypeWorks = Dummy['num']; // number -- yey, I'm happy.
但我想用泛型来做到这一点。我有以下不起作用的示例。我明白为什么:Dummy 没有实现{ num: number },它没有公共num 成员。所以我正在寻找替代品。
// Inferring from Dummy
type DummyMemberType<TMember extends string> = Dummy extends { [key in TMember]: infer R } ? R : never;
type DummyStrMember = DummyMemberType<'str'>; // string
type DummyNumMember = DummyMemberType<'num'>; // never :(
// Inferring from the member name
type DummyMemberType2<TMember extends string> = TMember extends keyof Dummy ? Dummy[TMember] : never;
type DummyStrMember2 = DummyMemberType2<'str'>; // string
type DummyNumMember2 = DummyMemberType2<'num'>; // never :(
我明白为什么这些不起作用。
我的问题:虽然我可以手动推断 num 的类型,但有没有办法以通用方式(使用更多元编程)来做到这一点?
背景:我想创建精美的装饰器,以保证除了被装饰的成员之外的其他一些成员。其中一些成员可能是私有的。
【问题讨论】:
标签: typescript metaprogramming private