admin管理员组文章数量:1295255
I can get a type representing class members like this:
class ClassWithFields {
public instanceMember: {a: string, b: number};
public secondInstanceMember: {q: "q"};
public static staticMember: {c: string, d: Date};
}
type getClassFieldType<TClass, TKey extends keyof TClass> = TClass[TKey];
type getClassFieldFields<TClass, TKey extends keyof TClass> = keyof TClass[TKey];
/**
* Resolves to:
* const testClassFieldType: {
* q: "q";
* }
* IDE suggests following things for second template arg: instanceMember, secondInstanceMember
*/
const testClassFieldType: getClassFieldType<ClassWithFields, "secondInstanceMember">;
/**
* Resolves to:
* const testGetClassFieldFields: "a" | "b"
*/
const testGetClassFieldFields: getClassFieldFields<ClassWithFields, "instanceMember">;
I want the same, specifically the list of fields, in a static field. That is I want a type that given ClassWithFields
and "staticMember"
, should resolve to key list containing "c"|"d"
.
I can get a type representing class members like this:
class ClassWithFields {
public instanceMember: {a: string, b: number};
public secondInstanceMember: {q: "q"};
public static staticMember: {c: string, d: Date};
}
type getClassFieldType<TClass, TKey extends keyof TClass> = TClass[TKey];
type getClassFieldFields<TClass, TKey extends keyof TClass> = keyof TClass[TKey];
/**
* Resolves to:
* const testClassFieldType: {
* q: "q";
* }
* IDE suggests following things for second template arg: instanceMember, secondInstanceMember
*/
const testClassFieldType: getClassFieldType<ClassWithFields, "secondInstanceMember">;
/**
* Resolves to:
* const testGetClassFieldFields: "a" | "b"
*/
const testGetClassFieldFields: getClassFieldFields<ClassWithFields, "instanceMember">;
I want the same, specifically the list of fields, in a static field. That is I want a type that given ClassWithFields
and "staticMember"
, should resolve to key list containing "c"|"d"
.
1 Answer
Reset to default 2To refer to a class itself (not its instance), use typeof
:
Playground
class ClassWithFields {
declare public instanceMember: {a: string, b: number};
declare public secondInstanceMember: {q: "q"};
public static staticMember: {c: string, d: Date};
}
type getClassFieldType<TClass, TKey extends keyof TClass> = TClass[TKey];
type getClassFieldFields<TClass, TKey extends keyof TClass> = keyof TClass[TKey];
declare const testGetClassFieldFields: getClassFieldFields<typeof ClassWithFields, "staticMember">;
本文标签: javascriptHow to refer to static field in mapped types in TypeScriptStack Overflow
版权声明:本文标题:javascript - How to refer to static field in mapped types in TypeScript? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741603645a2387846.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论