TS
数据类型
string
number
boolean
string
数组
number[] :是同类型的集合
元组
[number,string] 不同类型的集合
与数组的不同:
声明:
let a: number[] = [1, 2, 3, 4];
let t: [number, number, string] = [1, 2, 'string'];//声明时必须对应
**元组声明可以不赋值,但是赋值的时候,必须全部赋值完毕,否则会报错**
修改值:
元组修改的值的时候,只能添加或修改对应的类型
数组也只能添加对应的类型
枚举
enum 声明
enum a {'hello', 'word'};
a[0] === 'hello';
a['helllo'] = 0;
// 这里原生js存储的是
var a;
(function (a) {
a[a["hello"] = 0] = "hello";
a[a["word"] = 1] = "word";
})(a || (a = {}));
注意点
声明的时候,可以手动给值赋下标,例如:
enum a {'hello' = 5, 'word' = 2, 'a', 'b'}; // 下标重复
enum a {'hello' = 5, 'word' = 2, 'a'='hello'}; //手动赋值字符串
下标可以不为数字,可以为字符串等
如果下标为数字时,后一个数据是按照前一个数据下标 +1 来标记的,但是可能会导致下标重复(如上所示)会导致错误
如果用字符串来声明,会导致后续的所有的数据全部是0,例如
enum a {'hello' = 5, 'word' = 'hello', 'a', 'b'};、
var a;
(function (a) {
a[a["hello"] = 5] = "hello";
a["word"] = "hello";
a[a["a"] = void 0] = "a";// 这里下标0
a[a["b"] = void 0] = "b";// 这里下标0
})(a || (a = {}));
any 指任意类型
void 没有返回值
null 和 undefind
null 和 undefind是其他类型的子集,声明后可以转成任何其他类型
const d: string = null;
never 用不存在的类型
特点:
never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never
和void异同:
never可以是变量类型,但是void一般为无返回值
当never和void同时为函数返回值类型,never为Error返回值或永远不会有返回值;而void为无返回值,即无return字段
function demo(): void {
}
function demo(): never {
throw Error();
}
function demo(): never {
while (true) {
}
}
类型断言
< Type > 和 as类型断言
let demo: any = 'hello';
<string>demo;
demo as string;
类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的
function demo(x: string | number): string {
return x as string;
return x as boolean // 类型断言不是转换 就会报错
}