TypeScript中的class声明了什么
在初看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声明了什么相关推荐
- TypeScript 中的非基础类型声明
前言 在使用 TypeScript 进行类型声明时,除了使用到 boolean .number.string.Array 等基础类型,还会使用到 DOM 元素的声明,或者 setInterval 等常 ...
- Typescript中使用Axios
1)Vue.prototype 在vue项目main.js文件中: Vue.prototype.$appName = 'My App' 这样你可以通过在原型上定义它们使其在每个 Vue 的实例中可用. ...
- typescript利用接口类型声明变量_TypeScript入门指南(基础篇)
戳蓝字「前端技术优选」关注我们哦! 作者:慕晨同学 原文地址:https://github.com/USTB-musion/fee-skills/issues/19 写在前面 ts是拥有类型系统 ...
- JavaScript 和 typeScript 中的 import、from
From:https://segmentfault.com/a/1190000018249137?utm_source=tag-newest Github - allowSyntheticDefaul ...
- 第七节:在 TypeScript 中什么是类型推论?
上一节,我们学习了TypeScript中的一种新的数据类型:元组Tuple.没学习上一节的同学可以戳:<又一种新的数据类型:元组Tuple> 这一节,我们一起来学习一下TypeScript ...
- 第四节:5种数据类型在TypeScript中的运用
在上一节<第三节:快速编译TypeScript,提高开发效率>,我们学习了如何结合IDE快速地帮助我们编译TypeScript,有了这个辅助功能,我们的开发效率就大大提高. 接下来,我们就 ...
- any、never......TypeScript 中这些特殊的类型,你会用了吗?
作者 | geekAbyte 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中,我们来简要地讨论一下 TypeScript 中的三种有趣的类型:any.unknow ...
- TypeScript笔记(4)—— TypeScript中的类型注解
TypeScript(4):类型注解 [导读]JavaScript是若类型语言,而TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式,为我们提供了静态类型分析能力,这样我们就可以 ...
- typescript中的类型type与接口interface
typescript中的type相当于是给类型起一个新的名字 基本用法: 比如我想声明一个类型为number的年龄age,刚开始学typescript,我们可能会这样写 let age:number ...
最新文章
- win7没有个性化如何把计算机放到桌面,win7系统家庭版右键没有个性化设置桌面壁纸...
- 在Android Studio中进行代码混淆
- 006 Android之Activity
- php图片长宽处理,PHP重置JPG图片尺寸的函数
- FFmpeg从入门到精通:SEI那些事
- php正则过滤html标签_空格_换行符的代码,PHP 正则过滤 html 标签、空格、换行符的代码 (文章格式化)...
- finally块不被执行的情况总结
- 正则表达式30分钟入门教程(转)
- 苹果双系统运行oracle失败,oracle 11gR2 RAC for linux x86_64 grid运行root.sh 失败问题处理...
- 扩号匹配问题(信息学奥赛一本通-T1203)
- Java学习日报—Java并发—2021/11/22
- mysql排序后如何取最前和最后的数据_天天写order by,你知道Mysql底层如何执行吗?...
- 2022-2028全球与中国真空探针台市场现状及未来发展趋势
- 方正飞翔加密锁_方正飞翔6.0数字版注册机
- Floyd最短路算法
- 存储IP地址,到底用什么数据类型相对比较好
- 毕业设计-基于微信小程序与云开发的成绩查询系统
- 内存卡不小心格式化后怎么找回丢失数据?
- Mac 修改AppleID 使用“登录”钥匙串
- 北斗/GPS如何处理定位漂移?