ts类型
This commit is contained in:
parent
8f96698853
commit
5a61993958
@ -62,12 +62,93 @@ exports.Hello = Hello;
|
|||||||
```
|
```
|
||||||
就是一个语法的转换过程
|
就是一个语法的转换过程
|
||||||
|
|
||||||
|
### 语法与特性
|
||||||
|
ES6提供的语法糖就不提了, 基本每天都在写
|
||||||
|
就记录一下TS自己的一套类型体系吧
|
||||||
|
|
||||||
|
#### 变量类型
|
||||||
|
TS自带一套类型体系, 有一些与JavaScript当中有重叠 (当然JS当中也不能完全称之为类型, 因为都是对象)
|
||||||
|
string对应 JS的 String
|
||||||
|
number对应 JS的 Number
|
||||||
|
object对应 JS的 Object
|
||||||
|
boolean对应 JS的 Boolean
|
||||||
|
symbol对应 JS的 Symbol
|
||||||
|
|
||||||
|
所以定义变量时
|
||||||
|
```typescript
|
||||||
|
var str1: string = 'ab'
|
||||||
|
// 或者
|
||||||
|
var str2: String = 'cd'
|
||||||
|
```
|
||||||
|
都可以, 从eslint的默认设置来看, 官方推荐前者
|
||||||
|
|
||||||
|
##### 数组
|
||||||
|
数组类型有两种表示方法
|
||||||
|
```typescript
|
||||||
|
var arr1: string[] = ['ab','cd']
|
||||||
|
var arr2: Array<string> = ['ab','cd']
|
||||||
|
```
|
||||||
|
后一种明显很像Java的泛型写法, 但是eslint默认的语法检查规则推荐前者
|
||||||
|
|
||||||
|
##### 枚举
|
||||||
|
```typescript
|
||||||
|
enum Color1 {Red, Green, Blue}
|
||||||
|
let c1: Color1 = Color1.Green
|
||||||
|
|
||||||
|
enum Color2 {Black = 10, White = 20}
|
||||||
|
let c2: Color2 = Color2.Black
|
||||||
|
```
|
||||||
|
使用枚举类型可以为一组数值赋予友好的名字
|
||||||
|
默认从0开始编号, 也可以手动指定编号
|
||||||
|
|
||||||
|
##### 任意值
|
||||||
|
我们并不是每次都能知道变量的类型是什么, 或者是引入的一些第三方库, 本身就是JS写的
|
||||||
|
没有类型声明
|
||||||
|
那么可以用`any`来直接忽略编译阶段的检查
|
||||||
|
|
||||||
|
> 类型检查是TS的最大优势, 主要是帮助开发者排除错误的
|
||||||
|
any只是一种兼容的做法, 不应该滥用, 否则和写JS还有什么区别
|
||||||
|
|
||||||
|
##### 空值
|
||||||
|
对于定义变量不算很常用, 有几种表示方法
|
||||||
|
```typescript
|
||||||
|
// void类型包含 undefined和null
|
||||||
|
let n1: void = undefined
|
||||||
|
let n2: void = null
|
||||||
|
|
||||||
|
// undefined和null也是类型
|
||||||
|
let n3: undefined = undefined
|
||||||
|
let n4: null = null
|
||||||
|
|
||||||
|
// 可以用void表示一个函数无返回值(当然JS当中无返回值就是返回undefined, 这点也正好符合)
|
||||||
|
function test(): void {
|
||||||
|
console.log('test')
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
##### never
|
||||||
|
`never`可以用来表示函数的返回值, 表示用不存在的类型
|
||||||
|
该函数必须存在无法到达的终点 ( 比如抛出异常或者死循环 )
|
||||||
|
```typescript
|
||||||
|
function test1(): never {
|
||||||
|
throw new Error()
|
||||||
|
}
|
||||||
|
function test2(): never {
|
||||||
|
while(true) {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### 类型推断机制
|
||||||
|
|
||||||
|
如果声明变量时没有指定类型, 那么编译器就会根据初始化的赋值来推断这个变量的类型
|
||||||
|
对于函数返回值同样适用
|
||||||
|
比如
|
||||||
|
```typescript
|
||||||
|
let str = 'abc'
|
||||||
|
str = 10 // Error
|
||||||
|
```
|
||||||
|
初始化的赋值编译器推断str是string类型, 所以之后给他赋值number类型就会报错
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user