1. 类型推论
我声明了一个变量但是没有定义类型
let str = 'xxxx';
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是 类型推论
所以TS帮我推断出来这是一个string类型
不能够在赋值给别的类型
如果你声明变量没有定义类型,也没有赋值,这时候TS会推断成any类型可以进行任何操作
2. 类型别名type
type
关键字(可以给一个类型定义一个名字)多用于复合类型
2.1. 定义类型别名
type str = string;
let s: str = 'zs';
console.log(s);
2.2. 定义函数别名
type str = () => string;
let s: str = () => 'xxxxx';
console.log(s);
2.3. 定义联合类型别名
type str = string | number;
let s: str = 123;
let s2: str = '123';
console.log(s, s2);
3. type 和 interface的 区别
-
interface遇到重名的会合并,type不行
-
interface可以继承,type只能通过&交叉类型合并
-
type可以定义联合类型和可以使用一些操作符,interface不行
4. type高级用法
左边的值会作为右边值的子类型,遵循图中上下的包含关系
type a = 1 extends number ? 1 : 0 //1
type a = 1 extends Number ? 1 : 0 //1
type a = 1 extends Object ? 1 : 0 //1
type a = 1 extends any ? 1 : 0 //1
type a = 1 extends unknow ? 1 : 0 //1
type a = 1 extends never ? 1 : 0 //0