- 使用字面量进行类型声明
let a: number = 10;
- 可以用 | 来连接多个类型(联合类型)
let b: 'male' | 'female'; // b 可以是male 也可以是female
-
any
任意类型 不建议使用,any
类型的变量可以赋值给任意类型变量
let c: any;
c = 1;
c = '10';
c = false;
4.unknown
表示未知类型的值
注意:unknown是一个安全的any,unknown 不能直接赋值给其他类型
let d: unknown;
d = '1';
d = 1;
let s: string = '123';
s = d // 报错。不能将类型“unknown”分配给类型“string”
通过 类型断言
告诉解析器的实际类型
语法 变量 as 类型
或者<类型>变量
s = d as string;
// 或者
s = <string>d
-
void
表示空,表示没有返回值
function fn(): void {
// return null // 不能将类型“null”分配给类型“void”
// return undefined 这个不报错
}
-
never
表示永远不会有返回结果,比如报错终止代码
function fn2(): never {
throw new Error('error'); // 抛出异常
}
-
元组(Tuple)
,固定长度的数组
let i: [string, string];
i = ['hello', 'asd']
-
enum
枚举
enum Gender {
male,
female
}
let j: { name: string, gender: Gender };
j = {
name: '小黎',
gender: Gender.male
}
// 判断时
console.log(j.gender === Gender.male)
类型的别名
type mytype = 1 | 2 | 3 | 4 | 5;
let k: mytype;
k = 2;
有时候我们在声明对象的时候:
let e: { name: string }; // 指定e对象里必须有 name 属性, 有且只能有一个name属性,不能多不能少
e = {
name: '123',
// age: 18 // 报错
//不能将类型“{ name: string; age: number; }”分配给类型“{ name: string; }”。
//对象文字可以只指定已知属性,并且“age”不在类型“{ name: string; }”中。
}
当我们想要知道是否还有新属性时,比如age
// 语法:{属性名:属性值} 属性名后加 ? 表示该属性可选
let e: { name: string, age?: number };
e = {
name: '123',
age: 18
}
当我们不确定有几个新属性时
// [propName: string]: any 表示任意类型的属性名
let e: { name: string [propName: string]: any };
e = {
name: '123',
age: 18,
gender: '男'
}
函数结构的类型声明
// 语法:(形参:类型,...) => 返回值
//
let f: (a: number, b: number) => number
f = function (a: number, b: number): number {
return 20
}
数组里都是字符串
let g: string[];
// 或者这样写
let h: Array<number>