typescript入门基础
欢迎加入前端交流群交流知识&&获取视频资料:749539640
1.typescript介绍
微软开发的一门编程语言,javascript的一个超集,遵循最新的ES6脚本语言规范(2015年发布),它扩展了Javascript的语法,任何已经写好的javascript程序都可以不加改动的在typescript环境下运行,它只是向javascript添加了一些新的遵循ES6的语法,以及基于类的面相对象编程的特性。angular2框架2016年9月底发布,是由typescript语言来编写的;typescript是由谷歌和微软在背后支持的,有可能成为前端脚本语言发展的主流方向。
2.typescript优势
- 支持ES6语法
- 强大的IDE支持(允许为变量指定类型、语法提示【很强】、重构【很方便修改文件或方法的名字,自动连带修改】)
- angular2开发语言
3.typescript开发环境的搭建
目前的主流浏览器还不是完全支持ES6语法规范,用ES6写的程序并不能直接放到浏览器上,需要把typescript代码转换为javascript代码才能在浏览器里运行;
安装typescript compiler,这个是typescript的编译器
3.1在线complier:http://www.typescriptlang.org/play/index.html
3.2本地complier:
安装工具npm(基于node) cmd命令安装
npm install typescript -g //全局安装
tsc -v //
工具的使用:
新建一个hello.ts文件(typescript的后缀名是ts)(先写一个简单的类)
cmd进入文件目录执行命令:tsc hello.ts
之后会生成hello.js文件,这样就将ypescript代码编译为javascript代码
当然实际的开发当中不能一直这么tsc,太不方便了,我用的IDE是webstorm编辑器;
直接在编辑器里新建项目typescript flie;(hello.ts)
会有这么个提示点击configure
这样就配置好了webstorm的自动编译,它会自动生成对应的js文件,还是很方便的!(2017-11-22 10:09:26)
4.字符串新特性
4.1多行字符串;(js里字符串的换行是需要+号来拼接的,开发效率很慢,这里直接使用· ·就可以了【数字键1和esc和tab围起来的那个键!】)
//多行字符串
var string = `aaa
bbb
ccc`
4.2字符串模板:(在多行字符串里用表达式插入变量或方法)
//字符串模板
var myname = "wangzhichao"
var getname = () => {
return 'wangzhichao'
}
console.log(`hello ${myname}`)
console.log(`hello ${getname()}`)
4.3自动拆分字符串:(用字符串模板调用一个方法的时候,字符串模板里表达式的值会自动赋给方法中的参数)
//自动拆分字符串
var test=(temlpate,name,age)=>{
console.log(temlpate)
console.log(name)
console.log(age)
}
var myname = "wangzhichao"
var getAge = ()=>{
return 18
}
test`hello my name is ${myname},i am ${getAge()}`//根据表达式的数量进行切割
5.参数新特性
5.1指定参数类型
//1.指定参数类型
var age:number = 18;
var name1:string = "wangzhichao"
var woman:boolean = true;
var aa:any = "";//任何类型
function fs():void{
//指定一个函数返回空
}
function fs2():string{
return "";
}
class person{
name:string;
age:number;
}
var zhangsan:person = new person;
zhangsan.age = 18;
zhangsan.name = "zhansan";
5.2参数默认值(带默认值的参数要放在最后面)
//2.参数默认值
//带默认值的参数要放在最后面
var test1 = (a:string,b:string,c:string="zhangsan") =>{
console.log(a)
console.log(b)
console.log(c)
}
test1("wangzhichao","libai")
5.3可选参数 ?(可选参数放在必选参数后面)
//3.可选参数 ?可选参数放在必选参数后面
var test2 = (a:string,b?:string,c:string="zhangsan") =>{
console.log(a)
console.log(b)
console.log(c)
}
test2("wangzhichao222")
6.函数新特性
6.1rest and spread操作符(三个点...):用来声明任意数量的方法参数
//1.rest and spread操作符:用来声明任意数量的方法参数
function test(...a){
a.forEach(function (val,index) {
console.log(val,index); })
}
test(1,2,3,4,5)
6.2generator函数:
控制函数的执行过程,手工暂停和恢复代码的执行(function后有* 、next()方法去执行)
//2。generator函数:
//控制函数的执行过程,手工暂停和恢复代码的执行
function* doomse(){
console.log("start");
yield ;//断点
console.log("finish") }
var fun1 = doomse();
fun1.next();
fun1.next();
6.3析构表达式
//6.3.1 对象析构表达式
function list(){
return{
name:"apple",
price:{
price1:100,
price2:200
},
beizhu:"xixix"
}
}
var a = list();
var name1 = a.name;
var price1 = a.price.price2;
console.log(name1,price1)
var {name,price:{price1}} = list()
console.log(name,price1) //6.3.2 数组析构表达式
var arr = [1,2,3,4,];
var [ , ,n1,n2] = arr;
var [n1,n2,...ac] = arr;
console.log(ac,n1,n2)//ac为后面的全部数组
7.表达式与循环
7.1箭头表达式
//1.箭头表达式
//消除传统匿名函数this指向问题 function get1(name:string){
this.name = name;
setInterval(() => {
console.log(this.name)
},1000)
}
7.2for each、for in、for of
for each:循环数组的所有元素,会忽略掉数组的属性(info),不支持break();err方法可以,要求匿名函数返回布尔值;
for in: 循环数组的所有元素,包括数组的属性(info)
for of: 循环数组的所有元素,会忽略掉数组的属性(info),支持break();字符串也可以使用for of;
//2.forEach、for in和for of
var arr = [1,2,3,4];
arr.info = "four number"
arr.forEach((val,index) => {console.log(val,index)}); for (var n in arr){
console.log(n,arr[n])
}
for(var i of arr){
if(i>2){break}
console.log(i)
}
for(var j of "wangzhi chao"){ console.log(j)
}
8.面向对象新特性
8.1类
//8.1.1.类
class person {
//private //私有的
//protected //子类和内部可访问
// public //默认
name: "wang"; eat() {
console.log(this.name + " is eating s1i")
}
}
var p1 = new person();
//p1.name = "li";
//p1.eat();
//8.1.2.类 constructor
class woman {
constructor(public name: string) { } eat() {
console.log(this.name)
}
}
var p2 = new woman("wangzhichao")
//p2.eat()
//8.1.3.extends 继承
class people extends woman {
constructor(name: string, code: number) {
super(name);
this.code = code;
} work() {
this.do();
console.log("i am working")
} private do() {
super.eat()
}
}
var p3 = new people("wang11122", 12);
p3.work()
8.2泛型
参数化的类型,一般用来限制 集合的内容
//2.泛型
//参数化的类型,一般用来限制 集合的内容
class woman {
constructor(public name: string) { } eat() {
console.log(this.name)
}
}
var workers: Array<woman> = [];
workersp[0] = new woman("li rr");
8.3接口 interface
用来建立某种代码约定,使得其开发者在调用某个方法或创建新的类时必须遵循接口所定义的的代码约定
//3.接口 interface
//用来建立某种代码约定,使得其开发者在调用某个方法或创建新的类时必须遵循接口所定义的的代码约定
interface key {
name: string;
age: number;
}
class cat {
constructor(public size: key) {
}
}
var cat1 = new cat({name: "mao", age: 12});
//implements
interface animals {
eat()
}
class dog implements animals {
eat() {
console.log("woshigexiao")
}
}
8.4.模块
模块可以帮助开发者将代码分割为可重用的单元,开发者可以自己决定将模块中的哪些资源(类、方法、变量)暴露出去供外部使用,哪些资源只能在内部适用
8.5.注解
注解为程序的元素(类、方法、变量)加上更加直观明了的说明,这些说明信息的与程序的业务逻辑无关,而是供指定的工具或框架使用的
暴露使用export;
引入使用import
新建a.ts和b.ts文件(a.ts的类、方法、变量暴露出去。b.js里可以引入使用)
8.6.类型定义文件(*.d.ts)
使用已有的jquery文件等等
typescript入门基础的更多相关文章
- 学习笔记:TypeScript入门——基础类型
前言: TypeScript官网断断续续看过几遍,不知道项目中如何使用,有机会还是要实践一下.现在再把文档上不懂的知识点理一遍. 基础类型 1.什么是元组Tuple? 元组类型允许表示一个已知元素数量 ...
- typeScript入门基础 (1)
1.ts是js的超集,可使用es5,es6的代码 2. ts的安装与编译: a. 首先需要Node.js环境 . 相信都有,略过. 不会的请百度,或者留言. b. npm install - ...
- typeScript入门基础 (2): 数据 类型, 函数定义
1. number , boolean, string, null, undefind 枚举, any, array数组, 元祖, 2...枚举,需要的注意点, 下一个图,就是为什么yello ...
- TypeScript入门一:配置TS工作环境
配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- 01shell入门基础
01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...
- Markdown入门基础
// Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...
- JavaScript入门基础
JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...
- C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
随机推荐
- Jquery地图热点效果-鼠标经过弹出提示信息
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 关于WPF的验证
1.ValidationRule 验证 ValidationRule:是通过ValidationRule中的的Validate方法来验证我们绑定的属性.所以我们的用法是继承ValidationRule ...
- Weave Scope 多主机监控 - 每天5分钟玩转 Docker 容器技术(81)
除了监控容器,Weave Scope 还可以监控 Docker Host. 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息. host 当前 ...
- [SVN服务器搭建] 在myecplise下使用的 tortoise1.9 64位 跟 subversion1.9的服务器使用
由于在公司经常用到SVN服务器,所以自己也想搭建在本机上面搭建一个SVN服务器玩玩,废话不多说,下面直接贴出来如何搭建的. 一.tortoise1.9 64位下载 直接百度下载即可,百度时候需要显示 ...
- tp5引入第三方类库
1.在/public/index.php中添加 define('EXTEND_PATH', '../extend/'); 2./extend/lib 中添加第三方类,类文件的名称和类名一样,命名空间为 ...
- ASP.NET Core 开源GitServer 实现自己的GitHub
ASP.NET Core 2.0 开源Git HTTP Server,实现类似 GitHub.GitLab. GitHub:https://github.com/linezero/GitServer ...
- ssm框架的整合
首先创建一个web工程,我这里使用的IDE为eclipse. 结果目录如下: 添加相关的jar包: 接下来是完成配置文件 首先我们先配置web.xml: <?xml version=" ...
- MySQL(十六)之MySQL用户管理
一.MySQL用户管理概述 MySQL是一个多用户的数据库,MYSQL的用户可以分为两大类: 超级管理员用户(root),拥有全部权限 普通用户,由root创建,普通用户只拥有root所分配的权限 二 ...
- 数据处理不等式:Data Processing Inequality
我是在差分隐私下看到的,新解决方案的可用性肯定小于原有解决方案的可用性,也就是说信息的后续处理只会降低所拥有的信息量. 那么如果这么说的话为什么还要做特征工程呢,这是因为该不等式有一个巨大的前提就是数 ...
- RabbitMQ-客户端
Install-Package RabbitMQ.Client 参考: http://www.rabbitmq.com/download.html https://www.nuget.org/pack ...