TypeScript | 基础类型

159 阅读3分钟

一.typescript特点

TypeScript是强类型, 它提供了一套静态检测机制,如何我们编码事中途变换变量的类型,ts就会在报错,帮助我们在编码时发现错误

  • 支持最新的JavaScript新特特性
  • 支持代码静态检查
  • 支持诸如C,C++,Java,Go等后端语言中的特性
    (枚举、泛型、类型转换、命名空间、声明文件、类、接口等)

二.基础类型

1.语法 (变量): type = (值)

1.数字类型

let sum: number=1;

2.字符串类型

let name: string = '小小静'

3.数组类型

各个元素的类型必须得一致

1.方法1定义:在元素类型后面加 []

let list: number[] = [1, 2, 3]
let list: string[] = ['1', '2', '3']
let list: any[] = [1, '123']

2.方法2定义:使用数组泛型,Array<元素类型>

let list: Array<number> = [1, 1]
let list: Array<string> = ['1', '123']
let list: Array<any> = [1, '123']

4.元组(Tuple)

元组:是一个已知数量长度,类型的数组,各个元素的类型可以不同 元组继承于数组,但是比数组拥有更严格的类型检查

let tupleList: [number, string] = [1, '123']
let tupkeList: [number, number] = [1, 2]

 

5.枚举类型(enum)

  • 枚举类型是 TS 为 JS 扩展的一种类型,在原生的 JS 中是没有枚举类型的,
  • 枚举用于表示固定的几个取值

5.1数字枚举

1.定义枚举
  enum gender { male,female }
  默认从0开始为元素赋值: male==0,female==1
2.可以手动赋值
  enum gender { male=2,female }
  可以手动赋值从2开始为元素赋值: male==2,female==3
  enum gender { male=2,female=4 }
  可以全部手动赋值: male==2,female==4
3.获取元素对应得值
  enum gender { male=2,female=4 }
  let val = gender.male  //2
4.根据值映射相应得字段名称
  enum gender { male=2,female=4}
  let val = gender[4]   //female

5.2字符串枚举

类似于数字枚举但 字符串不支持正反向映射

1.定义枚举
 enum season {
    spring = 'a1',
    summer = 'a2'
  }
2.获取元素对应得值
  let val = season.spring  //al

5.3异构枚举

可以混合字符串和数字成员

1.定义枚举
  enum season {
    spring,
    summer = 'a2'
  }
console.log(season.spring)
console.log(season[0])
数字可以正反响映射,字符串不行

5.4常量枚举

在编译阶段就会被移除,没有对应的js 场景:当不需要一个对象,而只需要对象的值时,可使用常量枚举。会减少在编译环境上的代码

1.const定义
const enum season {
    spring,
    summer
}

 

6.枚举得本质

1.数字枚举

枚举 可以正反向同时映射的原因

var gender;
(function (gender) {
    gender[gender["male"] = 0] = "male";
    gender[gender["female"] = 8] = "female";
})(gender || (gender = {}));
详解:
1. var gender; 声明gender变量并且初始值{}
2.将gender对象 作为自执行函数的 实参传入
 (function (gender) {})(gender || (gender = {}))
3.给gender对象 的 “male” 属性赋值为 0
  gender['male'] = 0
  输出结果: {male:0}
4.给gender对象 新增一个 属性名为“0” 的属性,并且给其赋值
  gender[gender["male"] = 0] = "male";
  输出结果:{0: 'male', male: 0}
5.最后结果:
  gender= {
    "male" : 0,
    "0": "male"
  }
  gender['0'] ->male
  gender['male']-> 0

2 .字符串枚举

var season;
(function (season) {
    season["spring"] = "a1";
    season["summer"] = "a2";
})(season || (season = {}));

7.任意类型(any)

声明为 any 的变量可以赋予任意类型的值 检查器不会对类型进行检查

let list: any[] = [1, true, "free"];
let sum:any = 12;

8.void类型

void与any正好相反, 表示没有任何类型, 一般用于函数返回值。 在TS中只有null和undefined可以赋值给void类型

function add(): void { console.log('888')}
add()

三.类型推论 和 类型断言

1.作用

1.解释型强制类型转换 2.就是告诉编译器,这个不用做检查,我知道自己在干嘛

2.语法

值 as 类型 或 <类型>值

let le n: number = (<string>someValue).length;
let len: number = (someValue as string).length;

3.例子

一个any类型的变量, 但是我们明确的知道这个变量中保存的是字符串类型 此时就可以通过类型断言将any类型转换成string类型, 使用字符串类型中相关的方法了。

let str: any = 'siidid'
let len = (str as string).length //使用了字符串的length方法