在初看TypeScript的时候在这里卡住的时间难以估计,并不能很好的理解”换个角度说,我们可以认为类具有 实例部分与 静态部分这两个部分。“这句话。今天再回头看这部分文档,在同事的帮助下突然有了比较通透的理解。

class Greeter {static standardGreeting = "Hello, there";greeting: string;greet() {if (this.greeting) {return "Hello, " + this.greeting;} else {return Greeter.standardGreeting;}}
}

想要描述上面类声明所表达的信息,需要从两方面去描述:

这个类本身是什么类型?(JavaScript中类作为函数/对象所需要的描述)

这个类被实例化之后的结果是什么类型?(Java中的类所表达的类型信息)

类类型interface描述

类在JS中是函数的语法糖,那么描述类类型和描述函数类型应该没啥区别,上面Greeter 类的类型可以描述如下:

interface GreeterInstanceType {greeting: string;greet(): string
}interface GreeterType {standardGreeting: string;new (): GreeterInstanceType
}

使用上面的类型来声明变量,确实没有报错,所以说明上面的类型可以描述class Greeter:

let test1: GreeterType = Greeter
let intance1: GreeterInstanceType = new Greeter()

上面的类型可以看出来有两个interface配合起来才能描述类,而这两部分分别对应的就是:

GreeterInstanceType描述的是类的实例部分

GreeterType描述的是类的自身

这两部分就是TypeScript文档中描述的实例部分静态部分

类类型默认描述

上面是通过interface来描述class是可以做到的,对于描述类,TypeScript还提供了更友好的方法。

let test2: Greetertest2 = new Greeter()

上面代码中将类Greeter作为类型使用,这里表示的是test2是Greeter类型,这毋庸置疑。
但是Greeter本身表示的是什么呢? 这里表示的是Greeter这个类实例化的对象的类型。

可以换个角度来考虑,相同的代码带入到Java中,如下:

Greeter test2 = new Greeter();

但是如果是这样的一定是有问题的:

Greeter test2 = Greeter;

这是说不通的,因为这里的意思是Greeter这个类型是Greeter这个类的类型。

所以Greeter类作为类型表示的是Greeter类实例对象的类型。

那么怎么通过Greeter类来表示这个类自身(也就是类作为JS函数的描述),而不是这个类的实例呢?

let intance1: typeof Greeter = Gretter

上面的代码可以理解为设置变量instance1的类型为Greeter类型的类型。

Greeter表示的是Greeter实例的类型,那么Greeter实例的类型自然就是Greeter这个类本身的类型。

继续理解typeof:

typeof可以简单理解为提取变量的类型,所以还可以如下使用:

let a: number = 1let b: typeof a = 2

因为a的类型是number所以typeof a的值是number,所以b的类型就是number。

以上就是我理解的类声明所表达的全部内容。

参考

typescript文档 - 类

TypeScript中的class声明了什么相关推荐

  1. TypeScript 中的非基础类型声明

    前言 在使用 TypeScript 进行类型声明时,除了使用到 boolean .number.string.Array 等基础类型,还会使用到 DOM 元素的声明,或者 setInterval 等常 ...

  2. Typescript中使用Axios

    1)Vue.prototype 在vue项目main.js文件中: Vue.prototype.$appName = 'My App' 这样你可以通过在原型上定义它们使其在每个 Vue 的实例中可用. ...

  3. typescript利用接口类型声明变量_TypeScript入门指南(基础篇)

       戳蓝字「前端技术优选」关注我们哦! 作者:慕晨同学 原文地址:https://github.com/USTB-musion/fee-skills/issues/19 写在前面 ts是拥有类型系统 ...

  4. JavaScript 和 typeScript 中的 import、from

    From:https://segmentfault.com/a/1190000018249137?utm_source=tag-newest Github - allowSyntheticDefaul ...

  5. 第七节:在 TypeScript 中什么是类型推论?

    上一节,我们学习了TypeScript中的一种新的数据类型:元组Tuple.没学习上一节的同学可以戳:<又一种新的数据类型:元组Tuple> 这一节,我们一起来学习一下TypeScript ...

  6. 第四节:5种数据类型在TypeScript中的运用

    在上一节<第三节:快速编译TypeScript,提高开发效率>,我们学习了如何结合IDE快速地帮助我们编译TypeScript,有了这个辅助功能,我们的开发效率就大大提高. 接下来,我们就 ...

  7. any、never......TypeScript 中这些特殊的类型,你会用了吗?

    作者 | geekAbyte 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中,我们来简要地讨论一下 TypeScript 中的三种有趣的类型:any.unknow ...

  8. TypeScript笔记(4)—— TypeScript中的类型注解

    TypeScript(4):类型注解 [导读]JavaScript是若类型语言,而TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式,为我们提供了静态类型分析能力,这样我们就可以 ...

  9. typescript中的类型type与接口interface

    typescript中的type相当于是给类型起一个新的名字 基本用法: 比如我想声明一个类型为number的年龄age,刚开始学typescript,我们可能会这样写 let age:number ...

最新文章

  1. win7没有个性化如何把计算机放到桌面,win7系统家庭版右键没有个性化设置桌面壁纸...
  2. 在Android Studio中进行代码混淆
  3. 006 Android之Activity
  4. php图片长宽处理,PHP重置JPG图片尺寸的函数
  5. FFmpeg从入门到精通:SEI那些事
  6. php正则过滤html标签_空格_换行符的代码,PHP 正则过滤 html 标签、空格、换行符的代码 (文章格式化)...
  7. finally块不被执行的情况总结
  8. 正则表达式30分钟入门教程(转)
  9. 苹果双系统运行oracle失败,oracle 11gR2 RAC for linux x86_64 grid运行root.sh 失败问题处理...
  10. 扩号匹配问题(信息学奥赛一本通-T1203)
  11. Java学习日报—Java并发—2021/11/22
  12. mysql排序后如何取最前和最后的数据_天天写order by,你知道Mysql底层如何执行吗?...
  13. 2022-2028全球与中国真空探针台市场现状及未来发展趋势
  14. 方正飞翔加密锁_方正飞翔6.0数字版注册机
  15. Floyd最短路算法
  16. 存储IP地址,到底用什么数据类型相对比较好
  17. 毕业设计-基于微信小程序与云开发的成绩查询系统
  18. 内存卡不小心格式化后怎么找回丢失数据?
  19. Mac 修改AppleID 使用“登录”钥匙串
  20. 北斗/GPS如何处理定位漂移?

热门文章

  1. 人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者
  2. 团队作业(五):冲刺总结
  3. 11.【原创】chrom文件上传后,手动释放内存
  4. shell实战之tomcat看门狗
  5. [JSON].valueOf( keyPath )
  6. 隐藏响应的server,X-Powered-By
  7. 【XSY2720】区间第k小 整体二分 可持久化线段树
  8. DELPHI跨平台的临界替代者
  9. CellSet 遍历
  10. POJ 2398 Toy Storage