TypeScript01 编译环境的搭建、字符串特性、类型特性
知识准备:JavaScript满足ES5前端规范、TypeScript满足ES6前端规范
1 TypeScript开发环境
TypeScript代码不能直接被浏览器识别,必须先转换成JS代码;通常是利用编译器来讲TS代码转换成JS代码
1.1 使用在线的编辑器
1.1.1 利用TypeScript官网提供的编译器
TypeScript官网地址:点击前往

TypeScript官网提供的在线编译器:点击前往

1.1.2 利用Babel官网提供的编译器
Babel官网地址:点击前往

Babel官网提供的在线编译器:点击前往

1.2 使用线下编译器01
前提:先安装node.js(比较简单,百度即可)
1.2.1 安装编译器
npm --version 查看node.js版本

npm install -g typescript 安装typescript (注意:安装typescript的过程就是安装编译器的过程,由于我已经安装过了,就不进行演示;如果不会的请参见我的博客【博客分类:开发基础】)
tsc --version 查看typescript版本 (注意:安装好typesript后就可以使用tsc命令啦)

1.2.2 编写TS文件
新建一个文件夹test,并在该文件夹下创建一个名为hello.ts的TS文件,在TS文件中编写TS代码

1.2.3 编译TS文件
利用tsc命令将TS文件编译成JS文件
打开命令窗口,就如到test文件夹下;使用命令 tsc hello.ts 就可以将TS文件编译成JS文件;编译完成后就会在test文件夹下面多出一个名为hello.js的文件

文件夹下多出的JS文件

1.3 使用线下编译器02
下载一个WebStorm编译器,下载完后进行安装;WebStorm编译器很强大,可以代码补全、错误提示、自动编译成JS文件
WebStorm官网:点击前往
WebStorm编译器界面

设置自动编译

2 字符串特性
2.1 多行字符串
直接将多行字符串放在单引号或者双引号内在TS中会报错,在JS中不会报错,但是运行JS时会报错

运行JS文件的错误提示为

使用单引号或者双引号将多行字符串拼接起来后虽然不会报错,但是拼接的效果就变成了一行字符串,而不是多行字符串啦

运行JS文件的结果为

将字符串内容放在单撇号里面后就可以任意换行啦

运行JS文件的结果为

2.2 字符串模板
字符串模板是放在单撇号里面的
var myName : string = "AJS";
var myAge: number = 18; console.log(`Hello, ${myName}. Your age is ${myAge}`);

运行JS文件的结果为

2.3 多行字符串和字符串模板组合使用
通过多行字符串和字符串模板来实现HTML代码的拼接
var myName : string = "AJS";
var myAge: number = 18; var str: string = `
<div>
<span>${myName}</span>
<span>${myAge}</span>
</div>
`; console.log(str);
编译成的JS代码如下
var myName = "AJS";
var myAge = 18;
var str = "\n <div>\n <span>" + myName + "</span>\n <span>" + myAge + "</span>\n </div>\n";
console.log(str);
运行JS文件的结果如下

2.4 自动拆分字符串
利用字符串模板去调用一个方法时字符串模板中表达式的值会自动赋给被调用的方法作为参数
var myName : string = "AJS";
function test(template, name, age) {
console.log(template);
console.log(name);
console.log(age);
}
function getAge() {
return 18;
}
// 利用字符串表达式调用test方法
// 注意:会将整个字符串模板作为一个变量传给test方法的第一个参数,将字符串模板中的第n个表达式传给test方法的第 n+1 个参数
test`Hello, my name is ${myName}. My age is ${getAge()}`;
编译成的JS代码如下
var myName = "AJS";
function test(template, name, age) {
console.log(template);
console.log(name);
console.log(age);
}
function getAge() {
return 18;
}
// 利用字符串表达式调用test方法
(_a = ["Hello, my name is ", ". My age is ", ""], _a.raw = ["Hello, my name is ", ". My age is ", ""], test(_a, myName, getAge()));
var _a;
运行JS代码的结果如下

3 类型特性
3.1 变量的类型
可以在定义变量的时候指定参数类型,如果制定了变量类型,那么给变量赋值的时候必须是匹配的类型
// 定义一个名为str的变量,变量类型为string类型,而且赋值为AJS
var str: string = "AJS";
console.log(str); // 修改变量的值
str = 'Hello World.'
console.log(str); // 修改变量的值时,如果类型不匹配就会报错;但是编译成的JS文件不会报错,而且还能正常运行,因为JS不会进行类型检查
str = 1234;
console.log(str);
编译成的JS代码如下
// 定义一个名为str的变量,变量类型为string类型,而且赋值为AJS
var str = "AJS";
console.log(str);
// 修改变量的值
str = 'Hello World.';
console.log(str);
// 修改变量的值时,如果类型不匹配就会报错;但是编译成的JS文件不会报错,而且还能正常运行,因为JS不会进行类型检查
str = 1234;
console.log(str);
运行的JS文件的结果为

如果我们在定义变量的时候没有指定变量类型,就会根据首次赋值来指定该变量的类型
// 定义一个名为v01的变量,但是没有指定变量的类型;这种情况就会根据首次给变量赋值时来指定该变量的类型
var v01 = "AJS";
console.log(v01); // 因为首次给变量v01赋值了一个字符串,所以v01变量的类型就是字符串类型啦
v01 = 123;
console.log(v01);
编译成的JS代码如下
// 定义一个名为v01的变量,但是没有指定变量的类型;这种情况就会根据首次给变量赋值时来指定该变量的类型
var v01 = "AJS";
console.log(v01);
// 因为首次给变量v01赋值了一个字符串,所以v01变量的类型就是字符串类型啦
v01 = 123;
console.log(v01);
运行JS文件的结果如下

如果我们在定义变量的时候指定变量的类型为any,那么该变量就可以被赋任意类型的值
// 定义一个名为v01的变量,并指定变量类型为任意类型
var v01 : any = "AJS";
console.log(v01); // 因为变量的类型为任意类型,所以可以赋任意类型的值
v01 = 123;
console.log(v01);
编译成的JS代码为
// 定义一个名为v01的变量,并指定变量类型为任意类型
var v01 = "AJS";
console.log(v01);
// 因为变量的类型为任意类型,所以可以赋任意类型的值
v01 = 123;
console.log(v01);
运行JS文件的结果为

3.2 方法的返回值类型
如果在定义方法是指定了返回值的类型,那么方法的返回值就必须是该指定类型的值,否则会报错;如果不指定,那么返回什么类型都可以
// 定义一个名为test的方法,方法的返回值类型为string类型,返回值必须是string类型的值否则会报错
function test(): string {
console.log("设置test方法的返回值类型为字符串类型。");
return "warrior";
}
注意:如果指定方法的返回值类型为void,那么在方法体中就不能使用return关键值指定返回值(即:该方法没有返回值)
3.3 方法的参数类型
定义方法时可以指定方法的参数类型,如果在调用方法时传入的参数类型不匹配就会报错
// 定义一个名为test的方法,方法的返回值类型为string类型;参数类型为string类型
function test(name : string) {
console.log("设置test方法的返回值类型为字符串类型。");
console.log("hello, " + name);
return "warrior";
} // 调用方法时参数类型必须匹配,否则会报错
var result = test("Fury");
console.log(result);
编译成的JS代码如下
// 定义一个名为test的方法,方法的返回值类型为string类型;参数类型为string类型
function test(name) {
console.log("设置test方法的返回值类型为字符串类型。");
console.log("hello, " + name);
return "warrior";
}
// 调用方法时参数类型必须匹配,否则会报错
var result = test("Fury");
console.log(result);
运行JS文件的结果如下

3.4 参数类型详解
3.4.1 默认的参数类型
待更新...2017年8月1日10:53:31
可以自己查看typescript的文档
3.4.2 自定义类型
// 自定类型:就是定义一个类(和Java一样)
class Person {
name: string;
age: number;
} // 定义一个变量p01,变量类型为Persone类型
var p01 = new Person();
p01.name = "Fury";
p01.age = 18;
console.log(p01);
编译成的JS代码为
// 自定类型:就是定义一个类(和Java一样)
var Person = (function () {
function Person() {
}
return Person;
}());
// 定义一个变量p01,变量类型为Persone类型
var p01 = new Person();
p01.name = "Fury";
p01.age = 18;
console.log(p01);
运行JS文件的结果为

未完待续...2017年8月1日11:00:33
TypeScript01 编译环境的搭建、字符串特性、类型特性的更多相关文章
- swift 声明特性 类型特性
原文地址:http://www.cocoachina.com/newbie/basic/2014/0612/8801.html 特性提供了关于声明和类型的很多其它信息.在Swift中有两类特性,用于修 ...
- Java编译环境的搭建(eclipse)
每用一种语言开发,要搭建其编译和开发环境,我们废话不说,立刻来看看Java开发环境的搭建. 1.安装JDK和JRE Windows环境下: a.去Oracle官网下载对应版本的JDK安装包,http: ...
- 第一篇:《UNIX 网络编程 第二版》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 第三步:解压下载到的包并放在用户主目录中 第四步:进入包内并执行以下命令 su ...
- 第一篇:《UNIX 环境高级编程》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- 《UNIX 环境高级编程》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- 《UNIX 网络编程 第二版》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载http://ishare.iask.sina.com.cn/f/ ...
- WebAssembly学习(二):Windows10下WebAssembly C/C++编译环境的搭建与Hello World尝试
首先,不论是在Windows.Linux还是Mac上,Webassembly的编译都是主要依赖于Emscripten SDK这个工具的.但是,在这里必须要吐槽一下,不论是WebAssembly官网.W ...
- 【Linux编译环境的搭建】Linux都没有,怎么学Linux编程?
本文准备从0开始,一步步搭建一套属于自己的多节点Linux系统环境,这将是后续学Linux.用Linux.Linux环境编程.应用和项目部署.工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助. ...
- Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)
开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...
随机推荐
- bat 提示窗口,带换行
bat 提示窗口 各种窗口样式 mshta vbscript:msgbox("内容1",1,"标题1")(window.close) mshta vbscrip ...
- 《wifi加密破解论文》翻译介绍-wifi不再安全
前言 wifi的加密协议WPA2已经被破解,影响范围包括所有支持wifi的设备,包括Android,Linux,Apple,Windows,OpenBSD,联发科技,Linksys等.其中对Andro ...
- 深入了解java线程池(转载)
出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责 ...
- 【leetcode】1295. Find Numbers with Even Number of Digits
题目如下: Given an array nums of integers, return how many of them contain an even number of digits. Exa ...
- [NOI2017]蚯蚓排队
嘟嘟嘟 现在看来这道题还不是特别难. 别一看到字符串就想SAM 看到\(k\)很小,所以我们可以搞一个单次修改复杂度跟\(k\)有关的算法. 能想到,每一次断开或链接,最多只会影响\(k ^ 2\)个 ...
- 部署自己的聊天系统 DuckChat(鸭信)
之前在找一款能自己部署的聊天系统,要求含有手机端APP,最好部署过程能简单点的.看了几款稍嫌麻烦,有的还没有app.今天无意间发现了这款DuckChat,开源免费,有手机APP,部署非常简单.直接上传 ...
- codeforces#1163C2. Power Transmission (Hard Edition)(计算几何)
题目链接: https://codeforces.com/contest/1163/problem/C2 题意: 给出$n$个点,任意两点连接一条直线,求相交直线的对数 数据范围: $1 \le n ...
- Hadoop配置多个HDFS入口
为了验证存在不同的hdfs之间的hive的互操作(归根结底还是为了解决BUG) 需要在两个不同的hadoop集群的HDFS 能够在Hiveserver2上进行路由转发绕过一些坑. 就需要将某hdfs ...
- 【洛谷4542】 [ZJOI2011]营救皮卡丘(最小费用最大流)
传送门 洛谷 Solution 这是一道神仙题! 考虑这个东西是个啥. emmm,如果两个点要到达,一定不能经过比他们大的. 所以Floyd搞定两点距离然后费用流跑一遍就是答案了! 代码实现 /* m ...
- 3.rabbitmq--发布订阅模式
rabbitmq-----发布订阅模式 模型组成 一个消费者Producer,一个交换机Exchange,多个消息队列Queue,多个消费者Consumer 一个生产者,多个消费者,每一个消费者都有 ...