第一章
一:环境搭建
首先需要在电脑有npm下 下载typescript
命令是:npm i -g typescript
输入tsc可以查看是否下载成功ts
typescript的官网
www.typescriptlang.org/docs/handbo…
文件后缀都是ts(是简称的typescript)
二:创建文件和编译js文件
-
创建ts文件,后缀名是ts
-
在文件夹内输入cmd打开终端
-
在终端完善文件路径,输入tsc 需要编译的文件名字(成功的结果就是文件名,没有报错就是最好的结果)
-
查看文件夹 会有一个编译好的js文件,内容和ts文件一样
-
js文件可以在其他文件执行 但是 ts文件暂时不可以在浏览器中执行(后期应该可以,在学习)
三:typescript的基础语法
- 类型声明
-
- 类型声明是TS非常重要的一个特点
- 通过类型声明可以指定TS中变量(参数、形参)的类型
- 指定类型后,当为变星赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错。
- 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的
- 语法:
let变量:类型;
let变量:类型=值;
function fn(参数:类型,参数:类型):类型{
}
let a:number;
/*声明一个变量是number,在以后的使用过程中a的值只能是数字*/
a=10;
a=33;
// a= "yi"; /*会报错,因为a只能是number*/
let c:boolean = true;
//声明完直接赋值
//在函数中设置参数的类型是number 也设置返回值是number
function sum(a:number,b:number) :number{
return a+b;
}
sum(1233,456);
// sum(123,b:"456")
/*会直接报错*/
// sum(123,456,789)
/*789会报错,因为参数只有两位*/
- 自动类型判断
-
- TS拥有自动的类型判断机制
- 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型。
- 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
- 类型:
- number
let decimal : number = 6;
let hex: number = Oxf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let big: bigint = 100n;
- string
let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
- Boolean
let flag: boolean = true;
- 字面量
let a = 10;
a = 10;
// a = 11;
/*a此时只能是10,不能改为11*/
- 联合类型 使用 | 来连接多个类型(联合类型)
let b : "male" | "female" ;
b = "male";
b = "female";
//此时b只能是两个值,是他或者她
let c : boolean | string;
c = "您好";
c = true;
//此时c只能是布尔类型或者字符串类型
- any 表示的是任意类型
- 一个变量设置类型是any后相当于关闭了typescript的类型检测
/*显示使用any*/
let f :any;
/*隐式使用any
* 声明变量不指定类型,系统会自动判断类型是any*/
let d;
d = 10;
d = "10";
d = true;
- unknown未知的类型
let e:unknown;
e = "123";
e = 123;
e = true;
//此时e的类型是未知的
/*any类型和unknown类型赋值的区别*/
e = d;//d的类型是any,他可以赋值给任意的变量
//s = e; //e是unknown,不能直接赋值给别的值 可以判断赋值
let s:string;
if (typeof e === "string"){
s = e;
}
- 类型断言 可以告诉解析器变量的实际类型
语法:
- 变量 as 类型
- <类型>变量
s = e as string;
s = <string>e;
- void 表示为空
//函数为例 没有返回值
function fn():void {
// return true; 设置了返回的值就会报错,因为void类型没有返回值
return null;
return undefined;
// 返回值是undefined和null都还是可以的
}
- never 没有值 永远不会反悔结果
- 一般是报错
function fn1():never {
throw new Error('报错了');
}
- object 表示一个js对象
let a :object; //不太推荐
a = {};
a = function () {
};
//{}用来指定对象中 可以包含哪些属性
//语法:{属性名:属性值,属性名:属性值}
//在属性名后面加?表示该属性可选填写的
let b :{name:string,age?:number};
b = {name:'孙悟空',age:18};
//如果当 后期想加属性时 还要一个个填加 这时有个方法
//[propName:string]:any 表示任意类型的值
let c :{name:string,[xxx:string]:any};
c = {name:'猪八戒',age:18,gender:'男'};
/**
* 设置函数结构的类型声明
* 语法:(形参:类型,形参:类型...)=>返回值
*/
let d : (z:number,n:number) =>number;
d = function(n1:number,n2:Number):number{
return 10;
}
- array数组
** 相同类型的值
*** 数组类型的声明:
*** 类型:[ ]
*** Array<类型>*
// string[]表示字符串数组
let e : string[];
e:["0","1","2"]
// number[]表示数值
let f :number;
let g:Array<number>;
g = [1,2,3,4]
- 元组类型
- 固定长度的数组
let h:[string,number];
h = ["hellow",123];
- enum 枚举
- 可能的情况列出来
// 创建一个枚举 类名叫gender
enum Gender{
male = 0,
female = 1,
}
let i:{name:string,gender:Gender};
i = {
name:'孙悟空',
gender :Gender.male //"male"
}
console.log(i.gender === Gender.male); //true
15.&(于)表示同时
let j:{name:string}&{age:number};
// 赋值时两个都要写
j = {name:'孙悟空',age:18};
16.类型的别名
type myType = 1 | 2 | 3 | 4 | 5;
let k:myType;
let l:myType;
let m:myType;
// k = 6; 报错,因为mytype里面没有定义6