类型检查和类型断言区别

简介

类型检查类型断言的具体应用可以根据不同的场景和需求而有所不同。

  • 类型检查可以帮助我们在编码过程中发现潜在的类型错误,并提供更好的代码可读性和类型安全性。
  • 类型断言则可以在开发者明确知道某个值的类型时,告诉编译器将其视为特定类型,从而执行特定类型的操作。这些功能共同提供了更好的开发体验和代码质量。

类型检查

let x: number = 5;
let y: string = "hello";

x = "world"; // 类型检查错误,尝试将字符串赋值给数字类型变量
y.toUpperCase(); // 类型检查通过,调用字符串的 toUpperCase 方法

在上述例子中,我们声明了变量 x 的类型为 number,并赋予它一个数字值。然后,我们尝试将一个字符串赋值给 x,这违反了变量 x 的类型约束,因此编译器会报错。而对于变量 y,我们将其类型声明为 string,并调用了它的 toUpperCase 方法,因为变量 ystring 类型,该方法可以被调用,类型检查通过。

类型断言

let x: unknown = "hello world";
let length1: number = (x as string).length; // 使用类型断言将 x 断言为 string 类型
let length2: number = (<string>x).length; // 使用尖括号语法将 x 断言为 string 类型

在上述例子中,变量 x 的类型被声明为 unknown,这表示我们不知道它的具体类型。然后,我们使用类型断言将 x 断言为 string 类型,并调用了 length 属性来获取字符串的长度。通过类型断言,我们告诉编译器将 x 视为 string 类型,并且可以安全地访问 length 属性

function printId(id: number | string) {
  if (typeof id === "number") {
    console.log("ID is a number:", id);
  } else {
    console.log("ID is a string:", id);
  }
}

printId(123); // 输出:ID is a number: 123
printId("abc"); // 输出:ID is a string: abc

在上述例子中,我们定义了一个 printId 函数,它接受一个参数 id,该参数的类型是 numberstring。在函数体内部,我们使用 typeof 运算符进行类型检查,判断 id 的具体类型是 number 还是 string,并打印相应的信息。通过类型检查,我们可以根据参数的类型执行不同的逻辑。

你可能感兴趣的:(javascript,前端,开发语言)