当前位置: 首页 > 知识库问答 >
问题:

前端 - 什么情况下使用`class名`,什么情况下使用`typeof class名`?

居晗日
2023-07-03

请问我们在使用类型注释的时候,何时使用type class名,何时使用class名呢?

我经过如下实验:


class Person {
  name: string | undefined;
  getName = () => {
    return this.name 
  }
}

const persons: Person[]  = [
  new Person(),
  new Person(),
  new Person(),
] 


const persons2: typeof Person[]  = [
  Person,
  Person,
  Person
] 

比如以上,是否是返回类型为class名称的时候,使用 typeof class名,返回类对象的时候,使用class名

共有2个答案

臧增
2023-07-03
/* eslint-disable */
class Foo {
  public static bar: number
  public baz: string
}

type InstanceSide = Foo
type StaticSide = typeof Foo

const instance: InstanceSide = new Foo()
const classSelf: StaticSide = Foo
易风华
2023-07-03

在使用类型注释时,可以使用 typeof 关键字来表示类本身的类型,也可以直接使用类名来表示类的实例类型。

如果你想要表示一个类本身的类型,可以使用 typeof 关键字。例如,在你的示例代码中,const persons2: typeof Person[] 表示 persons2 变量的类型是一个类本身的数组类型。在这种情况下,typeof 关键字用于获取类本身的类型,而不是类的实例类型。

如果你想要表示一个类的实例类型,可以直接使用类名。例如,在你的示例代码中,const persons: Person[] 表示 persons 变量的类型是 Person 类的实例数组类型。在这种情况下,类名用于表示类的实例类型,而不是类本身的类型。

需要注意的是,typeof 关键字在 TypeScript 中还可以用于获取其他类型的类型,例如函数类型、基本类型等。而对于类来说,typeof 关键字主要用于获取类本身的类型,而不是类的实例类型。如果你想要表示一个类的实例类型,应该直接使用类名。

 类似资料:
  • 本文向大家介绍在什么情况下选择webpack?在什么情况下选择rollup?相关面试题,主要包含被问及在什么情况下选择webpack?在什么情况下选择rollup?时的应答技巧和注意事项,需要的朋友参考一下 非要一句话区分的话 如果是用,如果是用其实界限并不是特别明显。在某些特殊情况下可以互用

  • 大家能不能结合自己的项目大小,说明一下。 哨兵+主从模式,会在多大数据量情况下出现性能瓶颈?

  • 本文向大家介绍请问在什么情况下回使用assert?相关面试题,主要包含被问及请问在什么情况下回使用assert?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA 调试 assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolea

  • 问题内容: 我需要创建一个使用12个参数的存储过程,并使用此参数的不同组合来过滤查询。所有12个参数都不是强制性的,好像我传递3或5或12个参数取决于用户输入的搜索输入。 我可以使用动态SQL查询或“ Case where”语句创建2种方法。这些查询的示例如下: 动态查询 DECLARE @condition VARCHAR(MAX)=’‘ Declare @var1 varchar(10) De

  • Java 对字段具有不同的访问级别: 由于封装的概念,我们总是尝试使用<code>private</code>修饰符,以及所需访问级别的getter和setter。这个答案显示了它的各种优点。既然getter和setter很酷,我们应该在什么时候选择<code>public/protected/default对象字段 到<代码>私有对象字段 澄清:我完全理解为什么以及什么是getter、sette