TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts
1,面向对象的特性一:类,继承,见上一篇博客;
2,面向对象的特性二:
泛型(generic):参数化的类型,一般用来限制集合的内容;指定只能放某个类型的元素
如下图中的尖括号中的Person,就代表一个泛型,说明workers必须是一个内容必须放的是Person类型数据的数组;
例如:规定了数组workers的内容的类型后,如果声明了其他的内容,就会报错;44,45行是符合内容类型的,第46行就是报错了,

此处的employee是person的子类,所以是person的类型;
3,面向对象的特性三:接口 interface
接口:用来建立某种代码约定,使得其他开发者在调用程序或创建类时必须遵循接口的某种代码约定;
使用接口有两种典型的使用方式:
1)使用方式一:可以声明方法(可以是构造方法也可是非构造方法)的参数类型:检查传入方法的参数是否满足接口所声明的所有属性;
例:作为限制传入参数的类型:下图中的public config:IPerson 声明了构造函数的参数config的类型必须是接口的类型IPerson(带name和age的),

可以看出,对象p1的声明是正确的(因为符合构造函数的类型-接口类型中的name和age两种参数),而对象p2则是由于不符合构造函数的参数类型报错了;如果多传一个属性,或少传一个属性都会报错;
可选属性:带有可选属性的接口的声明和普通接口的定义差不多,只是在可选属性名字定义的后面加个 ? 符号,
interface Person{
name ?: string;
age ?: number;
}
可选属性的好处之一是对可能存在的属性进行预定义;好处之二是可以捕获引用了不存在属性时的错误;
只读属性:一些对象属性只能在对象刚刚创建的时候修改其值;可以在属性名前用readonly指定;
interface Person{
readonly name : string;
readonly age : number;
}
readonly VS const :
如果作为属性则使用readonly,如果作为变量则使用const;
函数类型:接口除了可以描述普通的对象类型,也可以描述函数类型:
interface searchFunc{ //searchFunc是函数名
(source : string , substring : string):boolean ; //boolean 是函数(返回值)类型;
}
使用这个函数类型的接口:
let mysearch : searchFunc;
mysearch = function(source: string ,substr:string){//对于函数类型的类型检查来说,函数的参数名可以不与接口里定义的完全相同,如 mysearch = function (src : string , sub: string); let result = src.search(sub);
let result = source.search(substr );
if(result == -1){
return false;
}
else{
return true;
}
}
2)使用方式二:用接口来声明方法,并且实现这个接口的类必须实现接口中的方法;

4,面向对象的特性四:模块 Module:
模块:模块可以帮助开发者将代码分割为可重用的单元。开发者可以自己决定将哪些资源(类,方法,变量)暴露出去供外部使用,哪些只在模块内部使用;
所谓模块就是文件,一个模块就是一个文件;并没有特殊的标志来标记什么是模块;
在模块的内部有两个关键字来支撑模块的特性:export(导出)和import(导入);
这两个关键字用来控制模块向外暴露什么,及其他模块需要为自己提供什么;
一个模块既可以export暴露它的属性,方法和类,也可以import别人的属性,方法和类;
带有export关键字的声明,都是可以暴露的(别的文件可以引用的)
如:
export var p1; //声明变量
export function fuc1(){}; //声明方法
export class Clazz1{} //声明类
不带export的声明:都是不可暴露的(别的文件不可引用的)
如:
var p2;
function func2(){};
class Clazz2{}
5,面向对象特性5:注解annotation:
是为程序的元素(类,方法,变量)加上更直观明了的说明;这些说明信息与程序的业务逻辑无关,而是供指定的工具或框架使用的;
以@开头的是注解的名称:@注解名称({});
括号里面有的是一些属性,例如:某个类的上面有个注解,则该注解中的属性就是该类加载时需要做的处理(如加载注解注解中的文件等);
6,面向对象特性6:类型定义文件(*.d.ts)来源是Definitely Typed:
有时需要在typescript中使用一些框架及其他工具什么的,如jQuery,此时就要用到类型定义文件;
类型定义文件用来帮助开发者在typescript中使用已有的javascript工具包,如jQuery等;
每个类型定义文件就是一个typescript模块,用来暴露想要使用的javascript工具包中的工具(直接在typescript中使用javascript工具包的工具会报错,需要类型定义文件来说明该工具的用法即暴露);
用来安装类型定义文件的工具 typings : 先到gitub.com 上搜索typings工具,了解相关命令,使用npm install typings -global;安装该工具,然后可以使用typings命令搜索,安装框架等工具了;
TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts的更多相关文章
- JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)
在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...
- TypeScript学习笔记(五) - 泛型
本篇将介绍在TypeScript如何使用泛型. 一.泛型方法 在TypeScript里,声明泛型方法有以下两种方式: function generics_func1<T>(arg: T): ...
- python学习-64 面向对象三大特性----继承1
面向对象三大特性 1.三大特性? 继承,多态,封装 2.什么是继承? 类的继承和现实生活中的父与子,继承关系是一样的,父类为基类. python中的类继承分为:单继承和多继承 3.举例说明 class ...
- TypeScript学习笔记(五):接口
使用接口 在前面的笔记中我们知道可以使用Object Type来指定参数的属性,如下: function printLabel(labelledObj: {label: string}) { cons ...
- python学习 day23 面向对象三大特性之继承
### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...
- Python学习 :面向对象 -- 三大特性
面向对象的三大特性 一.封装 把数据.值.变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1.创建对象 2.通过对象执行类中的一个 ...
- TypeScript学习笔记(三)泛型、模块化和命名空间
目录 一.泛型 1. 泛型函数 2. 泛型类 3. 泛型接口 写法一 写法二 两种写法的区别 二.模块化 1. export写法一 2. export写法二 3. 为引入的方法或变量起别名 4. ex ...
- Django学习(四) Django提供的后台管理系统以及如何定义URL路由
一旦你建立了模型Models,那么Django就可以为你创建一个专业的,可以提供给生成用的后台管理站点.这个站点可以提供给有权限的人进行已有模型Models数据的增删改查. 将新建的模型Models是 ...
- TypeScript 类型定义文件(*.d.ts)自动生成工具
在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...
随机推荐
- Ali也开始玩了阿
http://blog.alipay.com/ 查看源代码
- Javascript多线程引擎(八)
Javascript多线程引擎(八) Javascript 多线程项目, 做到现在已经快3个月了(加上前期准备编译原理和必要的文档), 该项目(js-engine)已经快进入尾声了, 现在该引擎 ...
- 解决Github使用Fastly CDN而导致不能加载网页的方法
Github现在基本属于“安全”网站,但 Github使用fastly.net的CDN服务后,其网站在国内经常不能正常加载网页.github.global.ssl.fastly.net的亚洲IP一般为 ...
- 关于 MVCC 的基础
作为第一篇对 MVCC 的学习材料,以下内容翻译自 Wikipedia. 1. 什么是MVCC 1.1 基础概念 MVCC,Multi-Version Concurrency Control,多版本并 ...
- 浅谈DevExpress<六>:为chart创建动态数据源
今天搞点稍微复杂些的东西,在列表中点击不同的行时,图表中显示和其数据关联的图,效果如下:
- JVM内存划分
JVM内存划分吗? 前言: 大家都知道虚拟机,都知道JVM,其实这些都是基于sun公司[oracle公司]的HotSpot虚拟机,当然本篇博文也是以sun公司为基础.还有其他的虚拟机,常见的就有JRo ...
- 【C#】聊聊不需要记密码的密码管理补充帖 —— 具体实现
开篇第一句话,就是“小白继续,有实际经验的兄弟们可以洗洗睡了”,因为这个 Lite 版是个实验性的实现,也由于水平原因源码不忍直视,所以如果你坚持看完了,请留下宝贵意见. 以下,干货: 基本模式: 程 ...
- 企业架构研究总结(25)——TOGAF架构开发方法(ADM)之迁移规划阶段
1.8 迁移规划(Migration Planning) 企业架构开发方法各阶段——迁移规划 1.8.1 目标 本阶段的目标是: 确保实施和迁移规划与企业中各种管理框架相协调. 通过对每个进行中的成本 ...
- 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...
- SOCKET网络编程细节问题3
SOCKET网络编程快速上手(二)——细节问题(3) 3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的 ...