typescript
TS(typescript)是什么?
TS是以JavaScript为基础构建的语言,是JavaScript的一个超集
TS扩展了JavaScript,并添加了类型。可以在任何支持JavaScript的平台执行。
TS不能被js解释器直接执行,需要将ts编译成js
TS增加了什么?
类型
支持ES的新特性
添加ES不具有的新特性
丰富的配置选项(编译为ES3,ES6等)
强大的开发工具
TS安装
1.安装node
2.安装npm
3.npm install -g typescript
4.tsc -v 查看tsc安装版本
TS编译
tsc ts.ts
编译成功生成同名js文件
类型声明:
1 | let a:number = 10;或者let a = 10; |
联合类型
联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。
注意:只能赋值指定的类型,如果赋值其它类型就会报错
1 | let d: 'male' | 'female'; |
TypeScript基础类型
数据类型 | 关键字 | 描述 |
---|---|---|
任意类型 | any | 声明为 any 的变量可以赋予任意类型的值 |
数字类型 | number | 双精度 64 位浮点值。它可以用来表示整数和分数。 let binaryLiteral: number = 0b1010; // 二进制 let octalLiteral: number = 0o744; // 八进制 let decLiteral: number = 6; // 十进制 let hexLiteral: number = 0xf00d; // 十六进制 |
字符串类型 | string | 一个字符系列,使用单引号(’)或双引号(”)来表示字符串类型。反引号(``)来定义多行文本和内嵌表达式。 let name: string = “Runoob”; let years: number = 5; let words: string = 您好,今年是 ${ name } 发布 ${ years + 1} 周年 ; |
布尔类型 | boolean | 表示逻辑值:true 和 false。 let flag: boolean = true; |
数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] = [1, 2]; // 或者使用数组泛型 let arr: Array |
元组 | 无 | 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。 let x: [string, number]; x = [‘Runoob’, 1]; // 运行正常 x = [1, ‘Runoob’]; // 报错 console.log(x[0]); // 输出 Runoob |
枚举 | enum | 用于定义数值集合 enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 输出 2 |
void | void | 用于标识方法返回值的类型,表示该方法没有返回值 function hello(): void { alert(“Hello Runoob”); 或者return; /return null; /return undefined} |
null | null | 表示对象值缺失 |
undefined | undefined | 用于初始化变量为一个未定义的值 |
never | never | never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值 |
any
1 | let a; |
类型断言(Type Assertion)
类型断言可以用来手动指定一个值的类型,即允许变量从一种值的类型转换为另一种类型。
语法:
- <类型>值
- 值 as 类型
never 不可能出现的值
1 | //表示不会有返回值的 |
对象
{}可以指定对象中有哪些属性
1 | let obj: {name: string,age?:number}; |
age?:number,?表示可选
多个属性可选:[propName: string]:any
1 | let obj: {name: string,[propName:string]:any}; |
函数结构的类型声明:
语法:(属性:类型,…)=>返回值
1 | let fun :(a:number,b:number)=>number; |
&:表示同时满足2个条件
1 | let obj2: {name:string} & {age:number}; |
类型的别名
1 | // 类型的别名 |
自动编译选项:tsc xxx.ts -w
添加tsconfig.json文件可编译目录下所有文件
tsc -init 生成tsconfig.json文件
tsconfig.json编译选项
include: [] 用于指定哪些文件需要被编译
- **: 任意目录
- *: 任意文件
exclude :[] 不需要被编译文件的目录
- “exclude”默认情况下会排除node_modules,bower_components,jspm_packages和
<outDir>
目录
- “exclude”默认情况下会排除node_modules,bower_components,jspm_packages和
extends: 可以利用extends属性从另一个配置文件里继承配置
files: [] 指定一个包含相对或绝对文件路径的列表
- 使用”include”引入的文件可以使用”exclude”属性过滤。 然而,通过 “files”属性明确指定的文件却总是会被包含在内,不管”exclude”如何设置
compilerOptions:编译器选项配置
- target:指定ECMAScript目标版本,默认ES3,”ES5”, “ES6”/ “ES2015”, “ES2016”, “ES2017”或 “ESNext”。
- module: 指定生成哪个模块系统代码: “None”, “CommonJS”, “AMD”, “System”, “UMD”, “ES6”或 “ES2015”。
- lib:[] 编译过程中需要引入的库文件的列表,例如ES5,ES6 ,DOM等
- outDir: 用来指定编译后文件所在目录
- outFile: 将输出文件合并为一个文件,只有 “AMD”和 “System”能和 –outFile一起使用。
- allowJs: 默认是false,允许编译javascript文件。
- checkJs: 默认是false,是否检测js语法,与allowJs配合使用
- removeComments: 默认是false,删除所有注释,除了以 /!*开头的版权信息。
- noEmit: 默认是false,不输出编译文件
- noEmitOnError: 默认是false 报错时不生成输出文件
- alwaysStrict: 默认是false 以严格模式解析并为每个源文件生成 “use strict”语句,当文件使用模块化时自动采用严格模式,不会生成文件头部’use strict’
- noImplicitAny: 默认是false 在表达式和声明上有隐含的 any类型时报错。
- 例如:function add(a,b){
return a + b;
}
- 例如:function add(a,b){
- noImplicitThis: 默认是false 当 this表达式的值为 any类型的时候,生成一个错误
- strictNullChecks: 默认是false 严格检查空值
- strict: 默认是false 启用所有严格类型检查选项。启用 –strict相当于启用 –noImplicitAny, –noImplicitThis, –alwaysStrict, –strictNullChecks和 –strictFunctionTypes和–strictPropertyInitialization
tsconfig.json文件
1 | { |