什么是TypeScript
TypeScript是JavaScript的超集,TypeScript扩展了JavaScript的语法,TypeScript编译成JavaScript,让TypeScript可以运行在任何浏览器和Node环境中。TypeScript是一种给JavaScript添加特性的语言扩展。
为什么要使用TypeScript
TypeScript增加了代码的可读性和可维护性。TypeScript增加了编译时的类型检查,使得很多错误在开发时就被发现。
TypeScript特点
支持最新的JavaScript新特性。
支持代码静态检查。
支持如C C 等语言的代码特性(枚举、泛型、接口、类…)。
安装
| yarn global add typescript |
复制
查看版本
复制
编译
复制
编译并监听
复制
配置文件
复制
| { |
| |
| "compilerOptions": { |
| |
| "target": "es2016", * |
| "module": "commonjs", * |
| "sourceMap": true, * |
| "outDir": "./dist", * |
| "rootDir": "./src", * |
| "strict": true * |
| ... |
| } |
| } |
复制
基本类型
| let str:string = 'hello ts!'; |
| let und:undefined = undefined; |
| let nu:null = null; |
| let bool:boolean = true; |
| let sy:symbol = Symbol(); |
复制
特殊类型 (any、unknown、never、void)
any
:表示任意类型,可以被赋予任何类型的值,并且对这些值不做任何类型检查。
unknown
:更安全的 any 类型,代表了一个未知的类型。当确实不知道一个值的确切类型,但是又希望保持类型检查时使用。
never
:表示永远不应该发生的值。比如抛出错误或者死循环,那么该函数永远不会执行完,不可能有返回值。
void
:表示没有类型,通常用于表示函数没有返回值。
| let any1:any; |
| any1 = 1; |
| any1 = 'a'; |
| any1 = true; |
| |
| let unk:unknown = 5; |
| if(typeof(unk) === 'number'){ |
| |
| console.log(unk * 2) |
| } |
| |
| function throwError(message: string): never { |
| |
| throw new Error(message); |
| } |
| try { |
| |
| throwError("Something went wrong!"); |
| } catch (error) { |
| |
| console.error(error); |
| } |
| |
| function fn(m:string): void { |
| |
| console.log(m) |
| } |
复制
值类型
| let uname: 'james' = 'james' |
| uname = 'kd' |
复制
数组和元组
| |
| let arr: string[] = ['a', 'b', 'c']; |
| let arr1:Array<number> = [1, 2, 3]; |
| |
| |
| let arr: number[][] = [ |
| [1, 2], |
| [3, 4], |
| ]; |
复制
- 元组:元组可以包含不同类型的元素,并且元素的类型、位置、数量都是确定的。
注意:给原本数组继续添加数据时,后添加的数据必须是前面数据的类型中的一个。
| let tuple: [number, string] = [1, "hello"]; |
| tuple.push("A"); |
复制
对象
注意:对于对象来说,应该限定对象中每个属性的类型,而不是限定对象这个整体的类型。
| |
| let obj:object; |
| obj = []; |
| obj = { |
| }; |
| obj = function (){ |
| } |
| |
| |
| let user: { |
| name: string; age: number } = { |
| |
| name: "张三", |
| age: 18, |
| }; |
复制
- 可选属性:在属性后面加上问号(?),表示该属性可有可无。
注意:一个对象中可以有任意多个可选属性。
| let user: { |
| name: string; age?: number } = { |
| name: "张三" }; |
复制
- 任意属性:在已有属性后,用中括号(
[]
)括起来。
注意:
一个对象只能有一个任意属性。
任意属性表示多个其他的属性,值的类型必须与定义时一致。
任意属性的类型一定是其他类型的父类,也就是必须要包含其他类型,比如:any包含string,但是number就不包含string。
| let user: { |
| name: string; [propName: string]: string } = { |
| |
| name: "张三丰", |
| address: "北京", |
| id: "xxx01", |
| }; |
复制
- 只读属性:在属性前面加上readonly,表示该属性值不能被修改。
注意:一个对象中可以有任意多个只读属性。
| let user: { |
| readonly name: string; age: number } = { |
| |
| name: "张三", |
| age: 18, |
| }; |
复制
内置对象
| let sym: symbol = Symbol("sym"); |
| let date: Date = new Date(); |
| let reg: RegExp = /[a-z]/; |
| let error: Error = new Error("error"); |
| let allDiv: NodeList = document.querySelectorAll("div"); |
| let body: HTMLElement = document.body; |
复制
函数
复制