TypeScript类型断言
在TypeScript中,类型断言是一种告诉编译器变量类型的机制。当 TypeScript 确定分配无效时,我们可以使用类型断言覆盖类型。如果我们使用类型断言,则分配始终有效,因此我们需要确定我们是正确的。否则,我们的程序可能无法正常工作。
类型断言明确告诉编译器我们要将实体视为不同的类型。它允许我们将 any 视为数字或将数字视为字符串。当我们从 JavaScript 迁移到 TypeScript 时,通常会使用类型断言。
类型断言类似于类型转换,但它不执行类型检查或数据重构,就像其他语言如 C# 和 Java 可以做的那样。类型转换具有运行时支持,而类型断言对运行时没有影响。但是,类型断言纯粹是一个编译时构造,并向编译器提供有关我们希望分析代码的方式的提示。
示例
let empCode: any = 111;
let employeeCode = code;
console.log(typeof(employeeCode)); //Output: number
在上面的示例中,我们声明了类型为 any 的变量 empCode。在下一行中,我们将此变量的值分配给另一个名为 employeeCode 的变量。在这里,我们知道 empCode 是数字类型,即使我们将其声明为 ‘any’类型。当我们将 empCode 分配给 employeeCode 时,我们断言 empCode 是数字类型。现在 employeeCode 的类型是数字。
TypeScript 提供了两种类型断言的方法。它们是
- 使用角括号<>
- 使用关键字 as
使用角括号<>
在 TypeScript 中,我们可以使用角括号”<>“来显示类型断言。
示例
let empCode: any = 111;
let employeeCode = code;
使用关键字 as
TypeScript 提供了另一种使用 ” as ” 关键字显示类型断言的方法。
示例
let empCode: any = 111;
let employeeCode = code as number;
对象类型断言
有时,我们可能会遇到一个没有声明任何属性的对象。此时编译器会报错。但是,通过使用类型断言,我们可以避免这种情况。我们可以通过以下示例理解它。
示例
let student = { };
student.name = "Rohit"; //Compiler Error: Property 'name' doesn?t exist on type '{}'
student.code = 123; //Compiler Error: Property 'code' doesn?t exist on type '{}'
在上面的示例中,我们将得到编译错误,因为编译器假定 student 的类型是 {},没有属性。我们可以通过使用类型断言来避免这种情况,如下所示。
interface Student {
name: string;
code: number;
}
let student = { };
student.name = "Rohit"; // Correct
student.code = 123; // Correct
在上面的示例中,我们创建了一个接口 Student,其中包含属性name和code。然后,我们对学生进行了类型断言,这是使用类型断言的正确方法。