如何从打字稿中的类中创建排除实例方法的类型?

HHK

给定一个包含属性和方法的类,我想派生一个仅包含其属性的类型。

例如,如果我定义一个类如下:

class MyObject {

  constructor(public prop1: string, public prop2: number) {}

  instanceMethod() { ... }
}

我想要一个类型,说MyObjectConstructor像这样:

type MyObjectConstructor = {
  prop1: string;
  prop2: string;
}

我知道我可以使用内置类型Pick并按名称手动选择想要的键,但是我不想重复所有的键,而不必在每次向类添加新属性时都进行更改。

有没有一种方法可以定义ConstructorType<T>只返回打字稿中类属性的泛型

HHK

感谢本文,我找到了一种排除与给定类型匹配的所有属性的方法:https : //medium.com/dailyjs/typescript-create-a-condition-based-subset-types-9d902cea5b8c

我做了一些改编,但这是细节:

// 1 Transform the type to flag all the undesired keys as 'never'
type FlagExcludedType<Base, Type> = { [Key in keyof Base]: Base[Key] extends Type ? never : Key };

// 2 Get the keys that are not flagged as 'never'
type AllowedNames<Base, Type> = FlagExcludedType<Base, Type>[keyof Base];

// 3 Use this with a simple Pick to get the right interface, excluding the undesired type
type OmitType<Base, Type> = Pick<Base, AllowedNames<Base, Type>>;

// 4 Exclude the Function type to only get properties
type ConstructorType<T> = OmitType<T, Function>;

试试看

可能有一种更简单的方法,我尝试使用ConstructorParameters并定义了构造函数签名,但没有结果。

更新资料

在浏览打字稿文档时找到了等效项:https : //www.typescriptlang.org/v2/docs/handbook/advanced-types.html#example-1

type NonFunctionPropertyNames<T> = {
  [K in keyof T]: T[K] extends Function ? never : K;
}[keyof T];
type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;

因为省略的类型不是泛型的,所以它有点冗长,但这是相同的想法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从打字稿中的类数组中解开类型

来自分类Dev

如何从打字稿中的类中提取类型?

来自分类Dev

从打字稿中具有相同父类的其他实例访问受保护的方法

来自分类Dev

从打字稿中的静态方法中检索类名称

来自分类Dev

使用类的方法在打字稿中创建联合类型

来自分类Dev

从打字稿中相同类的实例方法中简短引用静态函数

来自分类Dev

如何从打字稿中的数组类型获取类型的索引号?

来自分类Dev

从打字稿中的扩展类返回通用值

来自分类Dev

如何从打字稿中的动态键数组推断类型化数组?

来自分类Dev

如何从打字稿中的typeof对象中删除索引

来自分类Dev

如何使用React从打字稿中的对象创建HTML元素

来自分类Dev

如何使用AMD模块在普通js中创建打字稿类的对象实例

来自分类Dev

如何使用AMD模块在普通js中创建打字稿类的对象实例

来自分类Dev

无法从打字稿中的异步方法发出事件

来自分类Dev

如何从打字稿中的JSON中提取特定值

来自分类Dev

如何从打字稿中的日期中减去n天

来自分类Dev

如何从打字稿在html中设置图像网址?

来自分类Dev

坚持如何从打字稿中的数组计算模式

来自分类Dev

从打字稿中致电alertifyjs

来自分类Dev

从打字稿中的CLI解析文本

来自分类Dev

在打字稿中创建数组类型

来自分类Dev

从打字稿中的通用类型调用通用类型的静态函数

来自分类Dev

从打字稿中已识别联合的一部分中检测类型

来自分类Dev

如何修复打字稿中丢失的类型

来自分类Dev

如何检查打字稿中的值类型?

来自分类Dev

如何导入打字稿中的类型定义?

来自分类Dev

如何从打字稿中的JSON响应中获取日期对象

来自分类Dev

如何从打字稿中的静态参数数组中链接promise

来自分类Dev

如何从打字稿中的多页pdf中获取多个图像?

Related 相关文章

  1. 1

    如何从打字稿中的类数组中解开类型

  2. 2

    如何从打字稿中的类中提取类型?

  3. 3

    从打字稿中具有相同父类的其他实例访问受保护的方法

  4. 4

    从打字稿中的静态方法中检索类名称

  5. 5

    使用类的方法在打字稿中创建联合类型

  6. 6

    从打字稿中相同类的实例方法中简短引用静态函数

  7. 7

    如何从打字稿中的数组类型获取类型的索引号?

  8. 8

    从打字稿中的扩展类返回通用值

  9. 9

    如何从打字稿中的动态键数组推断类型化数组?

  10. 10

    如何从打字稿中的typeof对象中删除索引

  11. 11

    如何使用React从打字稿中的对象创建HTML元素

  12. 12

    如何使用AMD模块在普通js中创建打字稿类的对象实例

  13. 13

    如何使用AMD模块在普通js中创建打字稿类的对象实例

  14. 14

    无法从打字稿中的异步方法发出事件

  15. 15

    如何从打字稿中的JSON中提取特定值

  16. 16

    如何从打字稿中的日期中减去n天

  17. 17

    如何从打字稿在html中设置图像网址?

  18. 18

    坚持如何从打字稿中的数组计算模式

  19. 19

    从打字稿中致电alertifyjs

  20. 20

    从打字稿中的CLI解析文本

  21. 21

    在打字稿中创建数组类型

  22. 22

    从打字稿中的通用类型调用通用类型的静态函数

  23. 23

    从打字稿中已识别联合的一部分中检测类型

  24. 24

    如何修复打字稿中丢失的类型

  25. 25

    如何检查打字稿中的值类型?

  26. 26

    如何导入打字稿中的类型定义?

  27. 27

    如何从打字稿中的JSON响应中获取日期对象

  28. 28

    如何从打字稿中的静态参数数组中链接promise

  29. 29

    如何从打字稿中的多页pdf中获取多个图像?

热门标签

归档