Typescript 从类中提取属性和方法的特定类型并将其添加到接口
您好,打字脚本专业人士。我不想要一个解决方案,但一个提示,如果这在Typescript中是可能的。我对条件类型仍然比较熟悉。是否可以将属性和方法的类型从类提取到接口Typescript 从类中提取属性和方法的特定类型并将其添加到接口,typescript,typescript-typings,typescript-generics,conditional-types,Typescript,Typescript Typings,Typescript Generics,Conditional Types,您好,打字脚本专业人士。我不想要一个解决方案,但一个提示,如果这在Typescript中是可能的。我对条件类型仍然比较熟悉。是否可以将属性和方法的类型从类提取到接口 interface ExtractTypings<Class, MembersOrMethods> { // ????? } class Bar { a: boolean; b: number; c() { return 'some string'; } d() {} e() {
interface ExtractTypings<Class, MembersOrMethods> {
// ?????
}
class Bar {
a: boolean;
b: number;
c() {
return 'some string';
}
d() {}
e() {
return new Observable<number>();
}
}
class Foo implements ExtractTypings<Bar, ['a, c, e']> {
}
接口抽取类型{
// ?????
}
分类栏{
a:布尔型;
b:数字;
c(){
返回'somestring';
}
d(){}
e(){
返回新的可观察();
}
}
类Foo实现提取类型{
}
Typescript的版本:3.4.5您不需要条件类型,内置映射类型
Pick
应该实现以下功能:
class Bar {
a: boolean;
b: number;
c() {
return 'some string';
}
d() {}
e() {
return new Observable<number>();
}
}
class Foo implements Pick<Bar, 'a' | 'c' | 'e'> {
}
分类栏{
a:布尔型;
b:数字;
c(){
返回'somestring';
}
d(){}
e(){
返回新的可观察();
}
}
类Foo实现Pick{
}
如果我正确理解您的意图,您可以这样做:
type ExtractTypings<Class, MembersOrMethods extends (keyof Class)[]> =
Pick<Class, MembersOrMethods[number]>;
class Bar {
a: boolean;
b: number;
c() {
return 'some string';
}
d() {}
e() {
return new Observable<number>();
}
}
class Foo implements ExtractTypings<Bar, ['a', 'c', 'e']> {
}
类型提取键入=
挑选;
分类栏{
a:布尔型;
b:数字;
c(){
返回'somestring';
}
d(){}
e(){
返回新的可观察();
}
}
类Foo实现提取类型{
}
请注意,如果您不需要将成员声明为数组,提香·德拉戈米尔(Titian Dragomir)的解决方案更可取。更新:我发现了这两个很棒的类型库,它将typescript的内置类型(拾取、排除、提取、合并等)的数量增加到更有用的类型(例如头、尾、尾等……):
- (ts工具带的所有者)
注意:我还发现,要构建的这些复杂类型的核心实际上只是
扩展
,类型
和推断
!我不知道它会与Pick一起工作,所以我想展示我想要的用法。你能解释一下它的作用吗:MembersOrMethods[数字]!number在这里做什么?它创建了MembersOrMethods
所有元素类型的并集,因此它基本上与'a'|'c'|'e'
相同。这是因为数组元素键的类型总是number
。