1.什么是TypeScript?
-
TypeScript
是由微软发明,TypeScript
具有类型系统,且是JavaScript
的超集。 它可以编译成普通的JavaScript
代码,识别使用普通的JavaScript
语法。TypeScript
支持任意浏览器,任意环境,任意系统并且是开源的。TypeScript
目前还在积极的开发完善之中,不断地会有新的特性加入进来。
2. 下载使用TypeScript
- 使用
TypeScript
需要使用命令行工具npm
下载TypeScript
,
npm install typescript -g
- 在引入
js
文件的同级目录中创建一个.ts
的文件,和html
页面引入的js
文件同名,但不用创建js
文件,js
的代码都写在ts
文件里,在命令行窗口通过命令tsc
将.ts
文件转换为.js
文件,转换完成之后目录中会出现一个.js
文件。
注意,如果要使用es6的语法,下载babel
tsc index.ts
3.数据类型
TypeScript
的数据类型和JavaScript
(已有的数据类型)的数据类型保持相同,TypeScript
新增了元祖Tuple
,枚举
,任意值
,空值,never,类型断言。 object
,null
,undefined
,number
,string
,array
这些数据类型相同。
-
元祖Tuple
,元组类型允许表示一个已知元素数量和类型的数组,各元素的类型可以不相同,在后期的操作数组元素的时候,必须按照指定数据类型的方法操作,否则会报错。
image.png
let arr:[string,number,object];//定义数组元素类型
arr=['string',10,{name:"222"}]
console.log(arr)//['string',10.{name:"222"}]
-
枚举enum
类型是对JavaScript
标准数据类型的一个补充。将数值赋予一个名称,通过这个名称得到数值(类似于对象的键值),通过数值得到名称(类似于对象的键名),默认情况下是从0
开始编号,可以指定数值。按照对象理解就好了!其实就是将值和名称互为对象里的键值。
enum color {red=1,green=2,blue=9}
let first=color.red
console.log(first.blue)//9
console.log(color)//如下图
image.png
-
任意值any
在编程阶段还不清楚类型的变量指定一个类型,在编译时可选择地包含或移除类型检查,定义any
和其他数据类型有很大的区别,定义数据类型为any
之后,变量再次赋值不同数据类型,变量的数据类型也会改变(这在JavaScript
里面是很正常的,但是在TypeScript
必须设置any
),定义为其他数据类型的变量,再次赋值为不同数据类型,会报错。
image.png
let num:any=4;
let count:number=5;//number
count=true;
console.log(typeof num)//number
console.log(typeof count)//报错
num=true
console.log(typeof num)//boolean
-
空值void
和any
类型相反,它表示没有任何类型,当函数没有返回值的时候,通常会见到其返回值类型是void
,声明一个void
类型的变量没有什么大用,因为你只能为它赋予undefined
和null
。
function get():void{
console.log(111)
}
get()
let param:void=undefined;
console.log(param)
-
never
类型表示的是那些永不存在的值的类型,never
类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是never
类型,当它们被永不为真的类型保护所约束时。
function error(message: string): never {
throw new Error(message);
}
-
类型断言
其实就是数据类型转换,传统的JavaScript
存在隐式转换,自动转换数据类型,但是在TypeScript
需要特殊的的语法转换,否则会报错。
let someValue: string = "this is a string";
let strLength: number = (<string>someValue).length;
console.log(strLength)//16
3.变量声明
TypeScript
的变量声明和JavaScript
的变量声明都是通过关键字var
,let
,const
来声明,这些关键字声明有一定的区别。
-
let
声明的变量存在块级作用域,这点和const
一样,但是let
不存在预解析(变量的声明提前),而var
是存在的,且var
声明的只有全局作用域(作用域指变量的使用范围)和局部作用域,可以声明但不赋值,而const
不可以,const
只能声明常量(常量值不变,一直是固定的),且声明必须赋值。 -
TypeScript
可以指定变量的数据类型。
let num:number=10;
console.log(num)//10 number类型
4.接口
接口的作用就是为代码定义一些规则,代码在执行的时候,必须按照这些规则来,使用interface
关键字定义接口。
- 接口示例。
interface label {name:string};//定义一个label接口,它表示一个必须有一个属性名为`name`,属性值数据类型为`string`的对象。
function set(nameval:label){//nameval是参数名可以任意写,表示参数使用label接口
console.log(nameval.name)
}
let obj={name:"ddddd",age:10}//传入指定的参数,否则会报错
set(obj)
- 接口的可选属性
接口里面定义的属性,有时候不一定是必须使用的,所以可以使用?
来定义一个可选属性。
注意传入的参数可以不传定义的属性,但必须保持参数数据类型相同。
interface label {
name?:string,
age?:number
};
function set(nameval:label){
console.log(nameval)
let age=nameval.age;
return age
}
let obj={name:"ddddd"}
set(obj)
- 接口的只读属性,通过
readonly
设置属性只读,不能被设置,但是测试发现,虽然设置readonly
之后,再给对象属性赋值,虽然控制台会报错,但是打印的结果赋值成功了的。
报错信息
image.png
打印信息
image.png
interface point{
readonly a:number,
readonly b:string
}
let obj:point={a:10,b:"eeee"}
console.log(obj)
obj.a=100;
console.log(obj)
网友评论