类型定义
类型 | 描述 |
---|---|
number | 任意数字 |
string | 任意字符串 |
boolean | 布尔值true或false |
字面量 | 限制变量的值就是该字面量的值 |
any | 任意类型 |
unkonwn | 类型安全的any |
void | 没有值或undefined |
never | 不能是任何值 |
object | 任意对象 |
array | 任意数组 |
tuple | 元素,TS新增类型,固定数组长度 |
enum | 枚举,TS中新增类型 |
- number
let a:number // 类型定义
a = 10
console.log(a) // 类型为number
a = '我是stirng' // TS2322:Type 'string' is not assignable to type 'number'
console.log(a) // 类型为string
- 字面量
let a = 10;
a = 'hello'; // TS2322:Type 'string' is not assignable to type 'number'.
console.log(a); // 类型为string
- any 与 unkonwn 的同异
同:可以任意定义变量类型
let a: any; 或 let a:unkonwn
a = 'hello';
a = 10;
a = {};
a = [];
console.log(a); //[] 类型array 以上写法都不报错
异:在赋值时,变量定义固定类型
- any类型不会有提示错误
- unknown类型提示赋值类型错误
let a: any;
a = 'hello';
let s: number;
s = a; // 不会报错
console.log(s); // string类型
let a: unknown;
a = 'hello';
let s: number; // TS2322:Type 'unknown' is not assignable to type 'number'.
s = a;
console.log(s); // string类型
- void 定义返回值为空
function fn(a: object): void {
console.log(a);
return;
}
function fn2(a: object): void {
console.log(a);
return undefined;
}
// return 其他类型均报错 TS2322:Type 'null is not assignable to type 'void'.
- never 不能返回任何值
function fn(a: number): never {
throw new Error('报错了');
}
// return 任何类型均报错 TS2322: Type 'undefined' is not assignable to type 'never'.
- object 定义属性值任意类型
// 语法:{ 属性名:属性值,属性名:属性值 }
// 属性名后加上?,表示属性可选
let a = { name:string,age?:number }
b = { name:'typescript', age:18 }
// [propName:string]:any 表示可以有任意属性
let c :{name:string,[propName:string]:any}
// 设置函数结构类型声明,参数类型;返回值类型
let d :(a:number,b:number)=>number
- array 定义元素任意类型
// 语法:[类型,类型,类型]
let e: string[];
e = ['1', '2'];
console.log(e);
let f: <number>[];
f = [1, 2, 3];
console.log(f);
- tuple 定义固定长度数组
let h: [string, number] = ['Tom', 25];
console.log(h);
- enum 枚举指定变量
// 语法: enum 变量名称{value1,value2}
enum Gender {
Male,
Female,
}
let h: { name: string; gender: number };
h = {
name: 'xiaohuang',
gender: Gender.Female,
};
console.log(h);
- & 同时满足,类型别名type
let j :{ name:string } & { age :number }
// 语法:type 类型别名名称 = 类型A | 类型B ...
type MyType = string | number
let a :MyType
let b :MyType
let c :MyType