「这是我参与2022首次更文挑战的第31天,活动详情查看:2022首次更文挑战」。
类型推导
- 声明变量没有赋予值事默认变量是 any 类型
let name; // any 类型
name = 'dafei';
name = 18;
- 声明变量赋值时则以赋值类型为准
let name = 'dafei';// string 类型
name = 10; // 报错 提示name 应该是 string类型
包装对象
我们在使用基本数据类型时,调用基本数据类型上的方法,默认会将原始数据类型包装成对象类型
let bool1: boolean = true;
let bool2: boolean = Boolean(1);
let bool3: Boolean = new Boolean();
console.log(typeof bool1); // boolean
console.log(typeof bool2); // boolean是基本数据类型 , Boolean是他的封装类
console.log(typeof bool3); // object
联合类型
let name:string | number // 联合类型
// 看到别会有这样的说法
// 在使用联合属性时,没有赋值只能访问联合类型中共有的方法和属性
// 这里的!表示此值非空
console.log(name!.toString()); // 公共方法
name = 10;
console.log(name!.toFixed(2)); // number方法
name = 'zf';
console.log(name!.toLowerCase()); // 字符串方法
// 但是打印却是报错 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'toString')
// 直接打印 name是不可以的 加上! 打印确实可以打印成功 是个默认值 undefined 说一个人感觉这个说法不太对
// 应该是赋值过后的变量可以访问同类型上的属性及方法
// 希望有知道的大佬可以评论答疑解惑 谢谢
类型断言
- 尖括号语法
let str:any = '1234567'
let num:number = (<string>str).length;
// 尖括号断言会在 react 中被认为是 jsx 语法 慎用
// 尽量使用 as 断言
- as 语法
let str:any = '1234567'
let num:number = (str as string).length;
- 双重断言
let str: string | number ;
((str! as any) as number);
// 尽量不要使用双重断言,会破坏原有的类型关系,断言为any 是因为 any 类型可以被赋值给其他类型
字面量类型 type
type Direction = 'Up' | 'Down' | 'left' | 'reight';
let box = 'Down';
// 可以使用字面量做类型,同时也表明只能采用这几个值(限定值),类似枚举