public Book(int number,String name, int price, typescript typescript)

typescriptcript是JavaScript类型的超集它可以编译成纯JavaScript。typescriptcript可以在任何浏览器、任何计算机和任何操作系统上运行并且是开源的。

tsc xxx.ds执行会编译原生JS文件大概这样一个过程就这样吧。

  • Undefined未定义变量表示变量没有被初始化;

里面有几种JavaScript都有故不在描述,所以就挑几个没见过的

Enum 枚举类型:用于声明一组命名的常数,当一个变量有幾种可能的取值时可以将它定义为枚举类型。

说简单就例如一周只有七天分别是星期一,星期二....星期日比如一个月30天等等。

Any类型:表示当前对象属性不确定可以用Any表示。

Tuple元组类型:是一种特殊的数组元祖类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同例如定义一个String类型和Number的元组:

将一个功能相似的需求封装到一个代码块,这就是一个函数例如三个人,他们有不同的年龄名字,性别分别传入不同的名字,年龄性别得到是三个完全不一样的人类。

//=>他叫王大今年23岁了,是一个男生
  1. 声明(定义)函数必須加 function 关键字;
  2. 函数名与变量名一样命名规则按照标识符规则;
  3. 函数参数可有可无,多个参数之间用逗号隔开;
  4. 每个参数参数由名字与类型组成之间用分号隔开;
  5. 函数的返回值可有可无,没有时返回类型为 void;

想上面的humanity("王大",23,"男")里面包含的函数指的是实参:调用函数时传递嘚具体值就是实参。

那么形参是什么说通俗点就是可能不确定的参数,因为你不确定这个参数是否要用到

在typescriptcript语言中,函数的形参分为:可选形参、默认形参、剩余参数形参等

定义形参的时候,可以定义一个可传可不传的参数这种参数,在定义函数的时候通过?标注

例洳现在我有个情况我现在需要找一个人,找染头发的人类:

//=>找到24岁的人类并且染了黄头发!

当参数不传递的时候,会定义一个默认值而不是undefined。根据上面的代码继续改:

//=>找到24岁的人类并且染了黑头发!

当你编写一个函数,传递的参数个数不确定例如我要找一个有特征的人类,但我不确定是什么可能要找个大眼睛的人类,身高特高的人类等等这样一个情况:

//=>找到18岁大眼睛、小嘴巴、长得丑的人类

typescriptcript函數定义有三种方法:函数声明法、函数表达式法、箭头函数

函数声明法创建函数是最常用的函数定义法,使用function关键字和函数名去定义一個函数:

函数表达式法是将一个函数赋值给一个变量这个变量名就是函数名。通过变量名就可以调用函数了这种方式定义的函数,必須在定义之后调用函数。下面例子中等号右边的函数没有函数名称为匿名函数:

箭头函数是 ES6 中新增的函数定义的新方式:

在高级编程Φ都有变量作用域这个概念,基本分为全局变量局部变量

  • 局部变量:函数体内定义的变量就是局部变量
  • 全局变量:函数体外定义的變量就是全局变量。

产生这个结果的原因就是变量提升也就是当内部声明了和全局的变量同名时,就会出现变量提升的效果声明语句會提升到函数的第一句。

所以在ES6有个let关键词:使用let关键字的变量就是一个块级作用域变量

但在上面的内部3输出是报错的,但编译成功了这和ES5遗留问题有关,本文不再描述

typescriptcript中的数据分为值类型和引用类型。值类型类似变量等那么引用类型是什么?

//=>永远年轻永远热泪盈眶!

从上面看到引用类型是一种复合的数据类型,引用类型中封装了很多对属性每一对属性都有属性名和属性值。属性名是字符串屬性值是任意类型的数据。可以通过变量名和属性名获取属性的值或者调用属性的方法

在typescriptcript中也提供了一些引用类型,例如:Array(数组)、String(字符串)、Date(日期对象)、RegExp(正则表达式)等

声明数组跟声明一个普通变量是一样的,都是通过 var let 关键字实现的只不过数组的类型说奣符比较复杂而已。

//字面量赋值法:直接使用“[ ]”对数组进行赋值

在typescriptcript中指定数据类型的数组只能存储同一类型的数组元素。那么你需要鈈一样类型的请使用元祖类型

在 typescriptcript 中使用 Array 这个引用类型来表示数组的,那么每一个数组都是 Array 类型的实例:


  • 基本类型字符串:由单引号或者雙引号括起来的一串字符串
  • 引用类型字符串:用new 实例化的 String类型。

从输出情况来看这俩者是不一样的,但这实际上开发过程中这俩者開发效果是没啥不同的,都一样一个效果基本类型的字符串可以直接使用引用类型的属性和方法。

typescriptcript最大的特点就是有个类的支持所以囿类的特性基本上都支持面向对象编程。

我记得Java有句话是:类是对象具体事务的一个抽象对象是类的具体表现。应该很好诠释这个定义

在高级编程基本都有访问修饰符这块东西,同样在typescriptcript也有这个:类中属性的访问可以用访问修饰符来进行限制访问修饰符分为:publicprotectedprivate

  • public:公有修饰符可以在类内或者类外使用public修饰的属性或者行为,默认修饰符
  • protected:受保护的修饰符,可以本类和子类中使用protected修饰的属性和行为
  • private : 私有修饰符,只可以在类内使用private修饰的属性和行为

typescriptcript还有个属性叫readonly:使用readonly修饰符将属性设置为只读,只读属性必须在生命时或者构造函数裏被初始化

允许我们创建一个类(子类),从已有的类(父类)上继承所有的属性和方法子类可以新建父类中没有的属性和方法。

例洳新建一个父类这个类是人类的抽象:

上面就是一个人类的父类抽象模板,现在这里有不同的人类他们都有不同的特点。例如会烧饭会打架什么,所以需要继承人类的模板:

例如有个王大锤的人类他继承父类人类的基本特征:姓名、年龄、性别。还有自己的特征:佷帅和会打架

但现在发现王大锤不仅仅会说话,他还会闭嘴这个行为那么需要重写父类的say()行为:

super.say();是调用了父类的方法,实现了属性的增加

在通常情况下,接口是用来定义一些规范使用这些接口,就必须实现按照接口中的规范来走

在面向对象的语言中,术语interface经常被鼡来定义一个不包含数据和逻辑代码但是用来签名定义了行为的抽象类型

例如现在定义个接口,来规范一个人类:

上面声明一个接口來定义这个人类的性别和爱好。

作为人类有些人会某些事这些东西可以作为可选选项,只需要传入部分参数:

命名空间的关键词是:namespace 使用方法和PHP命名空间一样,作用就是被用于组织有些具有内在联系的特性和对象:

1.从遵循的规范上的角度:

typescriptcript提供了类、模块和接口来帮助构建组件更方便写面向对象的程序,所以被称为更好的typescriptcript

(2)运行第一个ts程序。

最后运行node来执行js文件

由来:javascript有一级函数嘚特性,也就是说函数能够当做参数进行传参,很好的用法不过太啰嗦所以ES2015提供了箭头函数,更加简洁

通过运行ts-node命令,屏幕显示结果为:

通过运行ts-node命令屏幕显示结果为:

通过运行ts-node命令(编译),屏幕显示正确的排序结果为:

ES6的类依然是使用构造函数和基于原型的继承但是语法更加方便和简洁。

下面是ES2016定义类的语法:

喜欢!除了类的定义体是对象外属性和方法的书写和java很像,我喜欢的方式

通过编译,屏幕显礻结果为:

(3)定义块级作用域中可见的变量

java和c++是块级作用域

只列举代码,表现为2点第一个是特定代码块的变量只能代码块内部可见,第二嵌套在内部的代码块中也可见。

(4)使用ES2016装饰器进行元编程

装饰器是ES2016的一个提案,它的依据是“在设计阶段可以对类和属性进行注释和修妀”在angular2很常用,可用来定义组件、指令以及管道并且还能配合依赖注入机制来使用。

装饰器典型的用法是把方法和属性标记为过期叧一个应用场景是声明式语法,从而实现面向切面的编程其实呢,装饰器只是一个语法糖而已装饰器目前并没有得到真正的使用

对應的ES5语法类似于:

接下来介绍angular 2装饰器的用法。

如果装饰器需要接收参数那么就定义为接收参数的函数,然后由函数返回真正的装饰器

(5)使用ES2015编写模块化的代码

angular 1.x引入了一套模块系统,不过并不支持懒加载特性angular 2种充分利用了ES2015提供的模块系统。ES2015提供了声明式API以及使用模块加載器的命令式API。

第一看一个简单的DEMO:

第二,ES2015模块化语法带有隐式的异步行为

A模块依赖于B、C模块。当用户请求A模块JS模块加载器会先加载B囷C模块,才能调用A模块这里B和C模块都是异步加载的。

第三典型的应用场景会给导出的内容起一个名字。

使用别名导入整个模块的DEMO:

模块導出使用了export default语法是一种带名字的导出。

基本的默认导出DEMO:

默认导出混合其他导出的DEMO:

通过编程的方式加载app模块执行main函数使用System对象的import方法就恏了。现在代码因为缺乏配置项所以还运行不起来。

有了静态类型那么IDE开发环境除了避免输入错误的语法高亮,还提供精确静态分析嘚建议很棒。

(1)使用显式类型定义

'number' 那么就是说,一旦foo设置了类型就不能赋值为其他类型了。

any类型是所有其他类型的父类代表可以拥囿任何类型的值,类似于动态类型一方面不会报错,另一方面则放弃了typescriptcript的优点了

就是javascript比较熟悉的Number、String、Boolean、Null、以及Undefined。而Enum是用户自定义的原苼类型它是Number的子类。含义是枚举用户自定义的类型由一系列有名称的值也就是元素构成。

首先讲更加通用的Array类型,它是Object的子类

typescriptcript的數组,要求元素类型相同。都可以使用js的各种数组方法比如push、join、splice等,也可以使用方括号运算符对数组元素进行访问

typescriptcript增加的是参数和返回徝的类型。

对象字面量的定义写法:

typescriptcript定义类属性的声明式强类型的。

有3个更好的实现封装和更优雅的接口。

●publicpublic的属性和方法在任何地方可以访问。

●privateprivate的属性和方法只能在类定义内部进行访问。

●protectedprotected的属性和方法可以类定义内部访问,也可以从子类访问

接口定义了一組对象共同的属性和方法,称作接口签名要实现接口,那么实现定义接口规定的所有属性和方法

接口之间可以互相继承。接口继承另外一个接口使用extends关键字。

可以写类似java的泛型代码好精彩!使用“<T>”。能写出更简洁的代码来

定义一组类型的class。

typescriptcript可以猜测代码中的静態类型好智能哦,所以可以用来省略一些代码

(2)与上下文有关的类型推断

这里可以看到e并没有规定类型,可是typescriptcript就根据上下文推断它为MouseEvent鼠標事件

尽管静态类型很酷,但是我们使用的大部分前端类库都是基于javascript构建的都是动态类型。而typescriptcript提供了额外的类型定义来给编译器提供提示。

(1)使用预定义的外部类型定义

step1:定义好类库的接口

step3:DOM通过reference引入,编译器就会找到对应的外部类型定义了

这个时候,会报错直到完铨实现定义的接口为止,如下:

这样分离出来就可以把全部的外部类型定义放在同一个文件里,方便管理了

以上就是typescriptcript指南详解的详细内嫆,更多请关注php中文网其它相关文章!

我们来看看typescriptcript中的基本数据类型都囿哪些

所以在使用boolean类型时要记得赋初值,以便避免以后的麻烦

需要注意的是,当不进行初始赋值时所有的基本数据类型都默认为undefined类型,下面不再重复讲解

表示为任意类型,如下:

我们发现notSure可以设定为任意的类型

我们也可以将其用在数组上,如下:

null和undefined基本是同义的只有一些细微的差别。

undefined表示"缺少值"就是此处应该有一个值,但是还没有定义

null表示"没有对象",即该处不应该有值

用在函数返回值,囷C++、Java用法一致表示没有返回值:

数组类型,可以有两种写法如下:

其它使用方法和JavaScript中一致。

可以当做Hash表来使用如下:

需要注意的是,该类型的键都是字符串类型即所有当做键的对象都会调用toString()方法获得对应的字符串来作为键值保存对象。

同时还可以对每个枚举进行赋徝如下:

这样,Green自动被赋值为2Blue自动被赋值为3。

我们还可以获得指定索引的枚举的名称:

需要注意的是这里的值可以看做数组的下标,如下:

将一个类型强制转换为另一个类型如果转换失败编译时会报错,如下:

typescriptcript中没有as关键字进行转换都是强制转换。

instanceof可以用来判断┅个对象是否为指定的类型如果是则返回true,否则返回false如下:

可以获取类型的字符串描述:

我要回帖

更多关于 typescript 的文章

 

随机推荐