TypeScript中的基本类型
TypeScript中的基本类型:
-
类型声明
类型声明是TS非常重要的一个特点;
通过类型声明可以指定TS中变量(参数、形参)的类型;
指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错;
简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值;
-
语法:
let 变量: 类型; let 变量: 类型 = 值; function fn(参数: 类型, 参数: 类型): 类型{ ... }
-
自动类型判断
- TS拥有自动的类型判断机制
- 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
- 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
-
类型:
类型 例子 描述 number 1, -33, 2.5 任意数字 string 'hi', "hi", hi
任意字符串 boolean true、false 布尔值true或false 字面量 其本身 限制变量的值就是该字面量的值 any * 任意类型 unknown * 类型安全的any void 空值(undefined) 没有值(或undefined) never 没有值 不能是任何值 object {name:'孙悟空'} 任意的JS对象 array [1,2,3] 任意JS数组 tuple [4,5] 元素,TS新增类型,固定长度数组 enum enum{A, B} 枚举,TS中新增类型 -
number
let decimal: number = 6; let hex: number = 0xf00d; let binary: number = 0b1010; let octal: number = 0o744; let big: bigint = 100n; //number[], Array<number>表示数值数组 let f: number[]; f = [1, 2, 3]; let f;Array<number>; f = [1, 2, 3];
-
boolean
let isDone: boolean = false;
-
string
let color: string = "blue"; color = 'red'; let fullName: string = `Bob Bobbington`; let age: number = 37; let sentence: string = `Hello, my name is ${fullName}. I'll be ${age + 1} years old next month.`; //string[] Array<string>表示字符串数组 let e: string[]; e = ['a', 'b', 'c'];
-
字面量
也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围
- “ | ”为 逻辑或 只要符合其中一样即可
let color: 'red' | 'blue' | 'black'; let num: 1 | 2 | 3 | 4 | 5;
- “ &”为 逻辑与 几项都要符合才行
let j: {name: string } & {age: number };; j = {name:'孙悟空', age;18};
-
any:
表示任意类型,变量设置any类型 相当于 关闭了TS的类型检测,赋值给其他变量会把其他变量的类型检测也关了,不但霍霍自己还嚯嚯别人。
不定义变量类型,隐式类型都为any
使用TS时,不建议使用any类型,用在哪里都不会报错,不易排错,不但霍霍自己还嚯嚯别人。
let d: any = 4; d = 'hello'; d = true;
-
unknown:表示未知类型的值,实际上就是一个类型安全的any,不可以直接赋值给其他变量
let notSure: unknown = 4; notSure = 'hello';
-
void :用来表示空,就是没有值的意思
let unusable: void = undefined;
以函数为例,就表示没有返回的函数值
function fu(): void{ return null }
-
never:表示永远不会返回结果
用途:程序运行出问题,用来报错 。使用频率不高
function error(message: string): never { throw new Error(message); }
-
object//表示一个js对象
let a: object; a = {}; a = function () { }; //1. //{}用来指定对象中可以包含哪些属性 //语法:{属性名:属性值, 属性名:属性值} //在属性名后边加上?,表示属性是可选的。 let b: {name: string, age?:number}; b={name:'孙悟空'}; 或者 b={name:'孙悟空', age:20}; 都可 //表示对象里面必须要有名为name的属性,[propName:string]:any表示 可以添加任意类型的属性 且不限个数 let c: {name;string,[propName:string]:any} //2. //设置函数结构的类型声明: //语法:{形参:类型, 形参:类型 ...}=> 返回值 let d:(a:number, b:number)=>number; d = function(n1:number, n2:number):number { return n1 + n2; }
-
array数组
//数组的类型声明: // 类型[] // Array<类型> let f: number[]; f = [1, 2, 3]; let list: number[] = [1, 2, 3]; let list: Array<number> = [1, 2, 3];
-
tuple元组:长度固定的数组
//元组的类型声明: // [类型, 类型, 类型] let h:[string, number, noolean] h= ['hello', 123, true]
-
enum枚举
enum Color { Red, Green, Blue, } let c: Color = Color.Green; enum Color { Red = 1, Green, Blue, } let c: Color = Color.Green; enum Color { Red = 1, Green = 2, Blue = 4, } let c: Color = Color.Green;
-
类型的别名
type myType = 1| 2 | 3 | 4 | 5 ; let k: myType; //可以等于12345中任意一个数字 但是6就不行(default) k = 2;
-
类型断言(强制判断,用来告诉编译器变量的实际类型)
语法:
变量 as 类型 <类型>变量
-
有些情况下,变量的类型对于我们来说是很明确,但是TS编译器却并不清楚,此时,可以通过类型断言来告诉编译器变量的类型,断言有两种形式:
-
第一种
let someValue: unknown = "this is a string"; let strLength: number = (someValue as string).length;
-
第二种
let someValue: unknown = "this is a string"; let strLength: number = (<string>someValue).length;
-
-
声明:本文内容引自bilibili “尚硅谷TypeScript教程”
个人学习归纳总结 ,欢迎畅谈。