TypeScript 类型断言
在TypeScript中,类型断言是一种机制,用于告诉编译器变量的类型。当TypeScript确定赋值无效时,我们可以使用类型断言来覆盖类型。如果我们使用类型断言,赋值将始终有效,因此我们必须确保我们是正确的。否则,我们的程序可能无法正确工作。
类型断言是明确告诉编译器我们想将实体视为其他类型。它允许我们将 any 视为数字,或将数字视为字符串。在将代码从JavaScript迁移到TypeScript时,常常使用类型断言。
类型断言类似于类型转换,但它不执行类型检查或数据重组,就像其他语言(如C#和Java)可以做的那样。类型转换带有运行时支持,而类型断言对运行时没有影响。然而,类型断言纯粹是一个编译时的结构,并为编译器提供了有关如何分析我们的代码的提示。
示例
let empCode: any = 111;
let employeeCode = code;
console.log(typeof(employeeCode)); //Output: number
在上面的示例中,我们声明了一个变量empCode,类型为any。在下一行中,我们将这个变量的值赋给另一个变量employeeCode。在这里,我们知道empCode的类型是number,即使我们将其声明为’any’。当我们将empCode赋给employeeCode时,我们断言empCode的类型是number。现在employeeCode的类型是number。
TypeScript提供了两种类型断言的方法。它们是:
- 使用尖括号
< >
-
使用as关键字
使用尖括号< >
在TypeScript中,我们可以使用尖括号< >来表示类型断言。
示例:
let empCode: any = 123;
let employeeCode = empCode;
使用 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 。然后,我们对学生使用了类型断言,这是使用类型断言的正确方法。