第一章:TypeScript中的基本类型
前言
TypeScript是什么?(1)、是添加了类型系统的 JavaScript,适用于任何规模的项目;(2)、是一门静态类型、弱类型的语言;(3)、是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性;(4)、与标准同步发展,符合最新的 ECMAScript 标准。
一、typeScript有哪些特性:
1、类型声明: 是TS非常重要的一个特点;通过类型声明可以指定TS中变量(参数、形参)的类型,指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错;简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值。
2、自动类型推断:当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型;所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明。
二、类型
Type | Example | Description |
---|---|---|
string | “Holle World”, “Hi” | 任意字符串 |
number | 12, 3, 4 | 任意数字 |
boolean | true/false | 布尔值 |
字面量 | 其本身 | 限制变量的值就是该字面量的值 |
any | * | 任意类型 |
unKnown | * | 未知类型 |
void | 空值 | 空值或undefinde |
never | 没有值 | 没有任何值 |
object | obj:{ name: string } | 任意的js对象 |
array | let list: string[] = [ ‘苹果’, ‘香蕉’] | 任意的js数组 |
tuple | [ 1, 2 ] | 元组:固定长度的数组 |
enum | enum Gender { male = 1, female = 0 } | 枚举 |
1.string
代码如下(示例):
let name: string = 'apple';
2.number
代码如下(示例):
let num: number = 1;
3.boolean
代码如下(示例):
let bool: boolean = true;
4.字面量
代码如下(示例):
let num: 10;
num = 10;
5.any
任意类型在ts中最好不要广泛使用,否则就失去类型检查的意义;
代码如下(示例):
let name: any;
name = 1;
name = '李氏';
name = true;
6.unknown
未知类型;
代码如下(示例):
let name: unknown;
name = 10;
name = 'banner';
name = true;
let str: string = '张三';
str = name; /* error 不能将unknown类型的变量再次赋值给已指定好类型的变量,这也是与any的区别所在 */
/* 如何解决这种问题? 方案如下 */
/* 方案一: 手动类型检查 */
if (typeof name === 'string') {
str = name;
}
/* 方案二: as断言 */
/* 断言: 通俗来讲是告诉解析器该变量的实际类型是什么 */
str = name as string; /* 或者 */
str = <string>name;
7.void
空值,常用于function中;
代码如下(示例):
/* function没有返回值,默认隐式类型void */
function fn (): void {}
8.never
没有任何值;
代码如下(示例):
/* 声明function没有任何返回值 */
function fn (): never{}
9.object
任意的js对象;
代码如下(示例):
let obj: { name: string }
obj = { name: '张三' }
let str: { name: string, [k: string]: any };
str = { name: '李四', age: 20, gender: '男' };
10.array
任意的js数组;
代码如下(示例):
let arr: string[] = ["apple", "banner"]
let arr: Array<string> = ["apple", "banner"]
11.tuple
元组:固定长度的数组;
代码如下(示例):
let arr: [string, number]
arr= ['apple', 12]
12.enum
枚举;
代码如下(示例):
enum Gender {
Male = 0,
Female = 1
}
let personal: { name: string, gender: Gender }
personal= {
name: '李四',
gender: Gender.Male
}
13.type
类型别名;
代码如下(示例):
type numType = 1 | 2 | 3 | 4 | 5
let a: numType;
let b: numType;
let j: numType;
a = 2; // a = 3, a = 4