TS基础语法(一)
前言:本文主要介绍TS基础语法。
一、什么是TS?
1.1 简介
TypeScript是⼀个开源的编程语⾔,通过在JavaScript的基础上添加静态类型定义构建⽽成。通过TypeScript编译器或Babel转译为JavaScript代码,可运⾏在任何浏览器,任何操作系统。
1.2 TS与JS的关系
TypeScript是JavaScript的⼀个超集,他们之间并不是所属关系,TypeScript扩展了JavaScript弱类型语⾔的限制,增加了更多的模块解析⽅式和语法糖。TypeScript并不是⼀个能独⽴运⾏的语⾔,⼤多数时候他都被转译成 JavaScript运⾏,所以可以简单的认为TypeScript相当于功能更丰富的编译型的JavaScript。
1.3 为什么要使用TS
JavaScript本身已完全可以满⾜完整的应⽤开发需求,但在⼤型项⽬协作开发或插件开发的场景中 JavaScript弱类型语⾔的不⾜便暴漏出来。由于JavaScript并⾮编译型语⾔,在代码编写过程中⽆法轻松的实现良好的类型约束和类型推断。TypeScript强类型的约束性以及其⾯向接⼝编程的约束性可以让TypeScript语法开发的应⽤有极强的 维护性,代价是更⼤量的代码篇幅。
1.4 TypeScript的性能优于JavaScript?
TypeScript通过编译后最终还是会转换为JavaScript,最终执行的还是JavaScript,并不能代表性能优势。TypeScript语⾔之所以流⾏,是因为其类型化的JavaScript,在上下⽂阅读时可以提供更好的类型追溯,通过编辑器插件可已实现更有好的提示。
TS入门
2.1 环境配置
中文文档地址 打开电脑的命令⾏⼯具执⾏TypeScript引擎安装命令:
1 2 3npm install typescript -g // 全局安装 tsc -v // 查看版本号2.2 Hello Word 实现
新建index.ts文件,用编辑器打开输入以下代码:
1 2let str:string = 'Hello Word'; console.log(str);打开终端输入
tsc,就自动编译出对应的index.js文件。输入node index.js完成> 终端编译js代码,打印输出Hello Word;3. 基础类型
在
JavaScript的基础上新增了几种数据类型,在定义值时要声明值的类型。let 变量名:变量类型 = 变量值。注意:类型是内置的时首字母建议小写,自定义定义的接口类型建议首字母大写。3.1 JS内置类型
1 2 3 4 5 6 7 8let big: bigint = BigInt(10); let sym: symbol = Symbol("lin"); let num1:number = 1; let str1:string = "1"; let unde1:undefined = undefined; let null1:null = null; let boo:boolean = true; boo = 'false'; // 报错 不能将类型“string”分配给类型“Boolean”3.2 any
不清楚用什么类型,可以使用 any 类型。这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。注:切勿滥用,不然就变成anyScript
1 2 3 4let num:any = 0; num = '0'; num = true; // 上面定义了一个num类型为any,可以给他赋值为任意类型。完全失去了TS的作用
3.3 unknown
当不知道一个类型具体是什么时,该怎么办?可以使用 unknown 类型,它代表任何类型,它的定义和 any 定义很像,但是它是一个安全类型,使用 unknown 做任何事情都是不合法的。例如:
1 2 3 4 5 6 7 8function getCount(num: unknown) { return num / 2; } // 会提示错误:对象的类型为 "unknown" // 解决方案 function getCount(num: unknown) { return num as number / 2; // as为类型断言,将参数转换为number类型 }3.4 void
void类型与 any 类型相反,它表示没有任何类型。比如函数没有明确返回值,默认返回 Void 类型
1 2 3function seeHello(): void { console.log('hello') }3.5 never
never类型表示的是那些永不存在的值的类型。
有些情况下值会永不存在,比如:
如果一个函数执行时抛出了异常,那么这个函数永远不存在返回值,因为抛出异常会直接中断程序运行。 函数中执行无限循环的代码,使得程序永远无法运行到函数返回值那一步。
1 2 3 4 5 6 7 8 9// 异常 function showError(msg: string): never { throw new Error(msg) } // 死循环 function showLoop(): never { while (true) {} }