类型断言类型断言相当于告诉 TypeScript 编译器相信我我知道这个值是什么类型。它不会改变变量的实际值只影响编译时的类型检查。as 语法 let length: number (value as string).length;处理联合类型interface Cat { name: string; meow(): void; } interface Dog { name: string; bark(): void; } type Pet Cat | Dog; function makeSound(pet: Pet) { // 我们确定传入的是 Dog (pet as Dog).bark(); // ⚠️ 如果传入 Cat运行时会报错 } // 更安全的方式使用类型守卫 function isDog(pet: Pet): pet is Dog { return (pet as Dog).bark ! undefined; } function makeSoundSafe(pet: Pet) { if (isDog(pet)) { pet.bark(); // ✅ 安全 } }处理 any 或 unknown// unknown 类型必须先断言才能使用 let data: unknown JSON.parse({name:Alice}); // data.name; // ❌ 错误unknown 类型不能访问属性 // 断言为具体类型 const user data as { name: string }; console.log(user.name); // ✅ Alice // 或者分步断言 let name (data as any).name; // 先转为 any不推荐类型收窄缩小类型范围// 从联合类型缩小为具体类型 let value: string | number hello; let upper (value as string).toUpperCase(); // HELLO // 从 any 收窄为具体类型 function getLength(value: any): number { return (value as string).length; // ⚠️ 如果传入数字运行时报错 }类型断言 vs 类型转换// 类型断言只在编译时影响类型检查运行时没有转换 const str hello as string; // 运行时还是 hello // 类型转换运行时真正改变值 const num Number(123); // 运行时变成数字 123 const bool Boolean(hello); // 运行时变成 true // ❌ 错误理解类型断言不会转换值 const value 123 as number; // 运行时 value 还是字符串 123 console.log(typeof value); // string非空断言告诉 TypeScript这个值绝对不是null或undefined放心使用。使用!后缀操作符。// 语法value! let name: string | null Alice; let length: number name!.length; // ✅ 非空断言 // 如果不加 !TypeScript 会报错 // let length2: number name.length; // 错误name 可能是 nullfunction processValue(value: string | null | undefined) { // 我们确信 value 一定不是 null 或 undefined const len value!.length; console.log(len); } // 注意如果实际传入 null运行时错误 // processValue(null); // ❌ 运行时报错可选链Optional Chaining?.可选链允许你在访问对象的深层属性时如果中间的某个属性是null或undefined则短路返回undefined而不会抛出错误。触发条件遇到null/undefined时停止执行返回值undefined或不执行后续操作// ❌ 传统方式容易出错 const user { name: Alice }; // const city user.address.city; // TypeError: Cannot read property city of undefined // ✅ 可选链安全访问 const city user.address?.city; // undefined不报错 console.log(city); // undefined空值合并空值合并是一个逻辑运算符当左侧是null或undefined时返回右侧的操作数否则返回左侧的值。// 基本用法 const value1 null ?? default; // default const value2 undefined ?? default; // default const value3 hello ?? default; // hello const value4 0 ?? default; // 00 不是 null/undefined const value5 false ?? default; // falsefalse 不是 null/undefined const value6 ?? default; // 空字符串不是 null/undefined