typescript里的 InstanceType

在TypeScript中,InstanceType 是一个内置的工具类型,用于获取一个类的实例类型。下面是一个简单的例子:

class MyClass {
  x = 0;
  y = 0;
}

type Instance = InstanceType<typeof MyClass>; // MyClass的实例类型

let instance: Instance = new MyClass(); // 这是正确的
instance.x = 10; // 这也是正确的

在上面的例子中,Instance 类型等于 MyClass 类的实例类型,所以你可以创建一个新的 MyClass 实例并将其赋值给一个 Instance 类型的变量。

InstanceType 主要用在一些高级场景,例如你想要创建一个工厂函数,该函数接受一个类作为参数,然后返回一个该类的新实例:

function create<T extends new (...args: any[]) => any>(C: T): InstanceType<T> {
  return new C();
}

let instance = create(MyClass);

在这个例子中,create 函数可以接受任何类,然后返回一个该类的新实例。InstanceType<T> 就用来获取 C 的实例类型。

在这个例子中用于创建一个泛型函数 create。这个函数接收一个类型参数 T,然后返回这个类型的实例。这里的 T extends new (...args: any[]) => any 是对 T 的约束,意思是 T 必须是一个可以用 new 运算符构造的类型。

详细解释如下:

  • T extends new (...args: any[]) => any 这一部分定义了 T 的约束。T 必须是一个类(或者说是可被 new 构造的类型),其构造函数可以接收任意数量和类型的参数(...args: any[]),并且构造函数的返回值可以是任何类型(=> any)。

  • new (...args: any[]) => any 这部分是 TypeScript 中的构造签名,表示一个可以用 new 运算符调用的函数,其参数为任意类型的数组,返回值也是任意类型。

  • InstanceType<T> 是 TypeScript 的内置工具类型,用于获取某个构造函数类型的实例类型。例如,如果 T 是 { new(): Foo },那么 InstanceType<T> 就是 Foo

所以,整体上,这个 create 函数的作用是接收一个类作为参数,然后创建并返回这个类的一个新实例。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

semicolon_helloword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值