TypeScript
🌸 您好,欢迎您的阅读,等君久矣,愿与君畅谈.
🔭 § 始于颜值 § 陷于才华 § 忠于人品 §
📫 希望我们可以进一步交流,共同学习,共同探索未知的技术世界 稀土掘金 OR GitHub.
# 1. 简介
- 以 JavaScript 为基础构建的语言;一个 JavaScript 的超集;可以在任何支持 JavaScript 的平台中执行,TS 不能被 JS 解析器直接执行,需要编译转换为 JavaScript;typescript 扩展了 JavaScript,并且添加了类型。
- typescript 增加了类型、支持 ES6 新特性、强大的开发工具、添加 ES 不具备的新特性、丰富的配置选项
# 2. 搭建 TS 开发环境
- 下载 node
- 安装 node
node -v - npm 全局安装 ts
npm i typescript -g - 检查 typescript 版本
tsc --version
# 3. 类型声明
-
基本类型 (小写)
1
2
3
4
5
6
7
81.number、string、boolean三种类型
let bb:number;
//TS具有自动类型判断机制,当变量和赋值同时进行时可以省略类型声明
let aa:string = 'hello';
let cc:boolean = true;
function(参数1:类型,参数2:类型):类型{
...
} -
字面量类型 (联合类型)
1
2
3
4let a:'test' | 'demo';
let b: boolean | number;
b = true;
b = 12 -
any (任意类型): 相当于关闭 TS 的类型检测
1
2
3let a;(隐式)
let b:any;(显式)
以上两种类型均是any类型 -
unknown (未知类型)
1
2
3
4
5
6
7
8
9
101.any赋值问题
let a:any;
let b:string;
b = a;//a是any类型,它可以赋值给任意变量(谁碰any谁变)
2.unknown赋值问题
let a:unknown;
let b:string;
b = a;//报错,unknown实际上是类型安全的any,unknown类型的变量,不能直接赋值给其他变量
可以使用类型断言处理报错[1.添加条件 2.类型断言]
3. -
void (用来表示空,以函数为例,表示没有返回值的函数)
1
2
3function fn():void{
return unll/underfined
} -
never (表示永远不会返回结果)
1
2
3function fn():never{
...
} -
object
1
2
3
4
5
6
7
8
9
10
11
12
131.let a:object;
a = {}
2.{}用来指定对象中可以包含哪些属性
语法:{属性名:属性值,属性名:属性值}
在属性名后边加上?,表示属性为可选的
let b:{name:string,age?:number}
b = {name:'测试',age:18}
3.定义对象:[属性名:类型(一般为string)]:类型(一般为any)
t c:{name:string,[propName:string]:any};
c = {name:'测试',age:18,gender:'男'};
3.定义函数:设置函数结构的类型声明
语法:(形参:类型,形参:类型...) => 返回值
let d:(a:number,b:number) =>number -
array
1
2
3
4
5
6
7
8
9
10
11数组的类型声明
1.类型[]
1.1 string[] 表示字符串数组
let a:string[];
a = ['a','b','c'];
1.2 number[] 表示数值数组
let b:number[];
b = [1,2,3];
2.Array<>
let aa:Array<number>;
aa = [1,2,3]; -
tuple (元组): 固定长度的数组
- 语法:[类型,类型,类型]
1
2let test:[string,string];
test = ['hello','hello']; -
enum (枚举)[常用于选择项]
1
2
3
4
5
6
7
8
9
10enum Gender{
Male = 1,
Female =0
}
let obj:{name:string,gender:Gender}
obj = {
name:'悟空',
gender:Gender.Male
}
console.log(obj.gender===Gender.Male); -
类型断言
1
21.语法1:变量 as 类型
2.语法2:<类型> 变量 -
补充
&同时
1
2let j:{name:string} & {age:number}
j = {name:'悟空',age:18}- 类型的别名
1
2
3type myType = 1|2|3|4|5;
let k:myType;
let l:myType;
# 4. 编译选项
-
tsc 文件名.ts -w:自动监视文件变化 -
tsconfig.json文件配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60{
// tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
// 用来指定需要编译的ts目录及文件
// 路径:** 表示任意目录,* 表示任意文件
"include": [
"./test.ts"
],
// 用来指定不需要编译的ts文件
// 默认值:['node_modules','bower_components','jspm_packages']
"exclude": [
"./demo.ts"
],
// 用来继承其他的配置文件
"extends": "./tsconfig.json",
// 用来指定需要编译的ts文件
"files": [
"./test.ts"
],
// 编译选项,对编译器的配置
"compilerOptions": {
// 项目选项
// 设置ts代码编译的目标版本
"target": "ES6",
// 指定要使用的模块化规范
"module": "ES6",
// 用来指定项目中要使用的库
"lib": [
"ES2015",
"DOM"
],
// 用来指定编译后文件所在的目录
"outDir": "./dist",
// 将代码合并为一个文件,所有全局作用域中的代码会合并到同一个文件里
// "outFile": "./dist/test.js"
// 是否对js文件进行编译,默认值为false
"allowJs": false,
// 是否检查js代码符合语法规范,默认值为false
"checkJs": false,
// 是否在文件编译后移除注释
"removeComments": false,
// 是否生成编译后的文件
"noEmit": false,
// 代码存在错误时不生成编译后的文件
"noEmitOnError": false,
// 所有严格检查的总开关
"strict": false,
// 用来设置编译后的文件是否使用严格模式,默认为false
"alwaysStrict": true,
// 不允许隐式的any类型
"noImplicitAny": true,
// 不允许类型不明确的this
"noImplicitThis": true,
// 严格检查空值
"strictNullChecks": true
}
}
TypeScript
http://example.com/2020/08/21/9001_TypeScript/