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的更多相关文章

  1. JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)

    在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...

  2. TypeScript学习笔记(五) - 泛型

    本篇将介绍在TypeScript如何使用泛型. 一.泛型方法 在TypeScript里,声明泛型方法有以下两种方式: function generics_func1<T>(arg: T): ...

  3. python学习-64 面向对象三大特性----继承1

    面向对象三大特性 1.三大特性? 继承,多态,封装 2.什么是继承? 类的继承和现实生活中的父与子,继承关系是一样的,父类为基类. python中的类继承分为:单继承和多继承 3.举例说明 class ...

  4. TypeScript学习笔记(五):接口

    使用接口 在前面的笔记中我们知道可以使用Object Type来指定参数的属性,如下: function printLabel(labelledObj: {label: string}) { cons ...

  5. python学习 day23 面向对象三大特性之继承

    ### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...

  6. Python学习 :面向对象 -- 三大特性

    面向对象的三大特性 一.封装 把数据.值.变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1.创建对象 2.通过对象执行类中的一个 ...

  7. TypeScript学习笔记(三)泛型、模块化和命名空间

    目录 一.泛型 1. 泛型函数 2. 泛型类 3. 泛型接口 写法一 写法二 两种写法的区别 二.模块化 1. export写法一 2. export写法二 3. 为引入的方法或变量起别名 4. ex ...

  8. Django学习(四) Django提供的后台管理系统以及如何定义URL路由

    一旦你建立了模型Models,那么Django就可以为你创建一个专业的,可以提供给生成用的后台管理站点.这个站点可以提供给有权限的人进行已有模型Models数据的增删改查. 将新建的模型Models是 ...

  9. TypeScript 类型定义文件(*.d.ts)自动生成工具

    在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...

随机推荐

  1. JS定时跳转URL并输出剩余秒数

    1. [代码][JavaScript]代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <scrip ...

  2. Android编程心得-在任意类中获取当前屏幕宽高

    进行Android编程时,很多时候都需要获取当前屏幕的宽度与高度,但是当我们需要在别的类中调用屏幕宽高时,直接用原来的方法是不行的,下面我来介绍如何在任意类中调用宽度高度的两种方法. public v ...

  3. twisted学习笔记 No.1

    原创博文,转载请注明出处 . 1.安装twisted ,然后安装PyOpenSSL(一个Python开源OpenSSL库),这个软件包用于给Twisted提供加密传输支持(SSL).最后,安装PyCr ...

  4. KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态

    KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 <寒江独钓>内核学习笔记(5)   继续我们的线程相关的数据结构的学习.接下来我们学习 KTH ...

  5. [转]UIWebView的Javascript运行时对象

    An alternative, that may get you rejected from the app store, is to use WebScriptObject. These APIs ...

  6. 企业架构研究总结(28)——TOGAF架构开发方法(ADM)之需求管理阶段

    1.11 需求管理(Requirements Management) 企业架构开发方法各阶段——需求管理 1.11.1 目标 本阶段的目标是定义一个过程,使企业架构的需求可以被识别.存储并与其他架构开 ...

  7. js闭包(转)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  8. 什么是DCI

    目录 备注什么是DCI?如何将Role注入到Data中?开发期注入字节码增强MixinTraitTemplateT4 + 部分类 + 显式接口实现 + 扩展类型,C#专用运行期注入Mixin动态代理为 ...

  9. OOC,泛型,糟糕的设计。

    虽然大部分都在谈ooc的编译器设计,但更多的内容在于程序设计的思想,复杂度,维护上面.我希望这篇文章能对读者有哪怕一丁点的帮助. 这篇文章遵循CC-BY-NC. = OOC,泛型,与那些糟糕的设计 原 ...

  10. 浅谈XSS

    最近在做项目中的漏洞修复工作,在短时间内接触到很多关于web开发需要防范的漏洞,例如SQL injection , XSS, CSRF等等,这些漏洞对web开发的项目来说的破坏还是比较大的,其实在网上 ...