let a:string;
a = '';//OK
a = 0;//Error
let a = ''; // 变量初始化时赋值。TS会自动对变量进行类型检测
a = 0;//Error
let a:string = '';
let b:number = 0;
let c:boolean = true;
let list:Array<number> = [1,2,3];
//或
let list:number[] = [1,2,3];
let x:[string,number];
x = ['',0];
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
x[6] = true; // Error, 布尔不是(string | number)类型
//字面量指定值为10
let a:10;
a = 10;// OK
a = 11;// Error 字面量声明的指定值不可违反
// 使用逻辑或 | 扩大指定范围 ⬇ ⬇ ⬇
//指定值
let a:'你好' | '您好' = '你好';
a = '你好';// OK
a = '您好'; // OK
a = '';// Error 字面量声明的指定值不可违反
//联合类型
let a:boolean | string;
a = true;// OK
a = '';// OK
a = 0;// Error
// any 任意类型 开启动态类型 关闭TS类型检测
let a:any;//主动定义为any类型
//或
let a;//声明不指定类型,自动判断为any; 为隐式any
a = '';
a = 0;
a = false;
a = [1,2,3];
let b:string;
b = a;// OK 允许将any类型的a赋值给string类型的b
// unknown 未知类型
let a:unknown;
a = '';
a = 0;
a = false;
let b:string;
b = a;// Error 不允许将unknown未知类型的a赋值给string类型的b
// 类型断言