TypeScript 中的类型保护是执行运行时检查的一种方式,并保证在某个特定的作用域中变量属于某种确定的类型。以下是一些常见的方法来触发 TypeScript 的类型保护机制:

    1. **typeof**类型保护
      这是检查基本类型的最简单方法。
      1. if (typeof someVar === "string") {
      2. // 在这个作用域里,someVar 的类型为 string
      3. }
    1. **instanceof**类型保护
      当你有一个类层次结构,并想检查某个实例是否属于某个类时,可以使用它。 ```typescript class Car { drive() { console.log(‘Driving a car’); } }

    class Boat { sail() { console.log(‘Sailing a boat’); } }

    function move(vehicle: Car | Boat) { if (vehicle instanceof Car) { vehicle.drive(); // vehicle 在这里明确为 Car 类型 } else { vehicle.sail(); // vehicle 在这里明确为 Boat 类型 } }

    1. 3. **用户定义的类型保护**:<br />这允许你创建一个函数,该函数的返回类型是一个类型谓词,用于明确某个变量的类型。
    2. ```typescript
    3. function isFish(pet: Fish | Bird): pet is Fish {
    4. return (pet as Fish).swim !== undefined;
    5. }
    1. 字面量类型保护
      使用联合类型时,可以通过比较字面量值来区分类型。 ```typescript type Action = { type: ‘click’ } | { type: ‘hover’ };

    function performAction(action: Action) { if (action.type === ‘click’) { // action 在这里是 { type: ‘click’ } 类型 } else { // action 在这里是 { type: ‘hover’ } 类型 } }

    1. 5. `**in**`**关键字类型保护**:<br />使用 `in` 关键字可以检查对象中是否存在某个属性,并据此缩小类型。
    2. ```typescript
    3. function doStuff(input: string | string[]) {
    4. if ('length' in input) {
    5. // input 在这里是 string[] 类型
    6. } else {
    7. // input 在这里是 string 类型
    8. }
    9. }
    1. 非空类型保护
      使用 ! 后缀或使用条件语句来排除 nullundefined
      1. function printLength(str: string | null) {
      2. if (str) {
      3. console.log(str.length); // str 在这里是 string 类型
      4. }
      5. }
    1. 断言类型保护
      通过类型断言来明确某个变量的类型,但它不进行实际的运行时检查。
      1. const someValue: unknown = "this is a string";
      2. const length: number = (someValue as string).length;

    这些是触发 TypeScript 类型保护的常见方法,但随着 TypeScript 的发展,可能会添加更多的特性和方法。