TypeScript初识

目录

介绍

定义

优点

类型声明

ts文件编译选项

自动编译

编译选项的各个属性

include   

compilerOptions


介绍

定义


TS(TypeScript)是一种由微软开发的编程语言,它是 JavaScript 的一个超集,提供了静态类型检查、类、接口、泛型等特性,可以在大型项目中提供更好的代码可读性、可维护性和可靠性。

优点

更严格的类型检查:TypeScript 强制要求变量、函数和对象的类型必须定义清楚,可以在编码阶段捕捉一些潜在的错误,提高代码可靠性。
更好的代码提示:TypeScript 可以在编辑器中提供更好的代码提示和补全,减少编码错误。
更好的可读性和可维护性:由于 TypeScript 的强类型特性和更严格的语法规范,代码可读性和可维护性得到了提高。
另外,TypeScript 还支持 ES6+ 的语法,并且可以与现有的 JavaScript 应用程序和库一起使用,因此是一个非常强大的编程语言

类型声明

类型声明是ts中非常重要的特点

通过类型声明可以指定ts中变量(参数 形参)的类型

指定类型后 当为变量赋值时 ts编译器会自动检查值是否符合类型声明 符合则赋值 否则报错

类型声明给变量设置了数据类型后 使得变量只能存储某种类型的值

语法:

let 变量名 : 类型

let 变量名 : 类型 = 值;

function fn(参数名 : 类型,参数名: 类型.....): 返回数据类型 {

....

//声明一个数字类型
let aa : number = 12;

//声明一个字符串类型
let bb : string;
bb = '你好'
//声明一个boolearn类型
let cc = true;
//声明一个函数,两个参数都是数字类型,设置返回数据类型也是数字
function fangfa(a:number,b:number):number{
  
    return a+b;
}

自动类型判断 

ts拥有自动的类型判断机制

当对变量的声明和赋值是同时进行的 ts编译器会自动判断变量的类型

所以如果变量的声明和赋值是同时进行的 可以省略掉类型声明

类型列表:

//object:

//{} 用来指定对象中可以包含哪些属性

//语法: {属性名: 属性值,属性名:属性值....}

let b: {name:string,age:number}

b = {name:'孙悟空',age:12}

//在属性名后加上? 表示该属性是可选

let c: {name:string,age?:number}

c = {name:'齐天大圣'}

c = {name:'猪八戒',age:12}

//[proName:string] : any 表示任意类型的属性  也就是后面可以选写任意数量和类型的属性

let r :{name:string,[proName:string]:any};

r ={name:'喜羊羊',age:15,sex:'男',weight:45}

//设置函数结构的类型声明
//语法: (形参:类型, 形参:类型...)=>返回值类型
let d :(a:number,b:number)=>number;
d = function(n1:number,n2:number): number{
    return n1+n2;
}


//数组
//string[] 表示字符串数组
let e : string[];
e = ['你好啊','弄','v']

//number[] 表示数值数组 等价于  Array<数据类型>
let f:number[]
f = [1,3,43,3]

let g :Array<number>
g=[123,34,56]


//tuple
//元祖  元祖就是固定长度的数组
// 语法 [类型,类型,类型]
let h:[string,number]
h=['nihao',12]


//enmu 枚举
enum gender{
    male = 0,
    female = 1
}
let i:{name:string,sex:gender};
i={name:'贝吉塔',sex:0}




//type 类型的别名 将一种自定义数据类型起一个别名来使用
//比如我们现在有一种自定义的数据类型  
//2|3|5|6|7|8|9.... 表示我们的数据只能是我们前面定义的数据类型中的数
let yy :2|3|5|6|7|8|9;
yy = 5;
let yi :2|3|5|6|7|8|9;
yy = 7;
//这样书写很麻烦,因为如果我们的自定义数据类型长度特别长的话 这样书写很不方便
//这个时候就需要用到类型的别名进行调整
type custorType = 1|2|3|4;
let kk:custorType;
kk = 4;
let ku:custorType;
ku =3;

ts文件编译选项

自动编译

我们在前面测试ts文件时,每添加修改ts文件时都需要输入 tsc 文件名.ts 对当前的ts文件进行编译,

这样在开发中也是很不方便的,如果有成百上千的ts文件的话就需要一个一个这样编译是很不现实的,所以这里我们可以开启ts文件的自动编译

先看我们的普通编译

编译后

  

将当前ts文件添加为自动编译

在命令行输入 tsc 文件名.ts -w  即可开启当前文件的修改监听编译

我们直接修改ts文件

 

修改ts文件后进行保存后,稍等1~2秒可以看到ts文件被自动编译了

去js文件中便可以看到编译后的内容了

但是这种监听只支持单个ts文件的,如果当前目录中有成百上千的ts文件的话难不成也要一个一个开启监不成吗? 

答案是当然不用,我们可以创建一个ts文件的配置文件来管理ts的批量编译

先准备3个ts文件

 然后再在当前目录下创建一个 tsconfig.json的文件 内容为空对象{}即可

 然后直接在终端输入命令 tsc -w

 

 可以看到自动编译出了3个js文件,此时当前目录下的ts文件全部被监听编译了

tsconfig.json 是ts编译器的配置文件ts编译器可以根据它的信息来对代码进行编译

编译选项的各个属性

include   

用来指定目录下的ts文件被编译

    /** 表示任意目录

    /* 表示任意文件

举例,我们这里准备两个目录,在两个目录下都新建有ts文件 注意目录结构,这里的tsconfig.json文件和那两个目录是同级并列

 

 在include里设置只编译 part2_1的ts文件

 注意:

tsconfig.json修改配置后一定要先保存文件然后再输入命令,终端这里是在tsconfig.json文件所在的目录下执行命令 tsc -w

 可以看到只有part2_1的文件编译有js文件,而part2_2目录下的文件并没有被编译

exclude 

指定不需要被编译的文件目录

我们这里准备三个目录,在前面的目录下再准备part2_3

 

 

 可以看到除了part2_2目录下没有被编译,另外两个目录都被编译了

compilerOptions

  编译选项是配置文件中非常重要也是比较复杂的配置选项

  在compilerOptions中包含多个子选项 用来完成对编译的配置

举例说明各属性

{
    //tsconfig.json 是ts编译器的配置文件
    //ts编译器可以根据它的信息来对代码进行编译
    
    //include  用来指定目录下的ts文件被编译
    // ** 表示任意目录
    // * 表示任意文件
    "include": [
        "./part2_1/*"
    ],

    //exclude 指定不需要被编译的文件目录
    // "exclude": [
    //     "./part2_2/*"
    // ]
    "compilerOptions": {
        //用来指定ts被编译的版本
        "target": "ES2016", 
        // 指定代码运行时所包含的库(宿主环境)
        "lib":["ES2016","DOM"],
        //设置编译后代码使用的模块化系统
        "module": "System",
        //指定编译后文件所在的目录
        "outDir": "./part2_2",
        //指定将编译后的代码合并为一个文件
        "outFile":"./part2_1/app.js",
        //是否对js 文件进行编译 默认是false
        "allowJs": false,
        //是否检查js代码是否符合语法规范 默认是false
        "checkJs": false,
        //编译后是否移除注释
        "removeComments": false,
        //不生成编译后的文件
        "noEmit": false,
        //当有错误时不生成编译后的文件
        "noEmitOnError": true,
        //用来设置编译后的文件是否使用严格模式 默认false
        "alwaysStrict": true,
        //不允许隐式的any类型
        "noImplicitAny": true,
        //不允许不明确类型的this
        "noImplicitThis": true,
        //严格的检查空值
        "strictNullChecks": true,
        //所有严格检查的总开关
        "strict": false

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值