📜  TypeScript类型断言

📅  最后修改于: 2021-01-11 12:25:49             🧑  作者: Mango

TypeScript类型断言

在TypeScript中,类型断言是一种机制,用于告知编译器变量的类型。当TypeScript确定分配无效时,我们可以选择使用类型断言来覆盖类型。如果使用类型断言,则分配始终有效,因此我们需要确保我们是正确的。否则,我们的程序可能无法正常运行。

类型断言明确地告诉编译器我们要将实体视为其他类型。它使我们可以将任何数字视为数字,或将数字视为字符串。当我们将代码从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是number类型。现在, employeeCode的类型是number

TypeScript提供了两种执行类型声明的方法。他们是

  • 使用角括号<>
  • 用作关键字

使用角括号<>

在TypeScript中,我们可以使用尖括号“> ”来显示Type Assertion。

let empCode: any = 111; 
let employeeCode =  code; 

用作关键字

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 '{}'

在上面的示例中,我们将得到一个编译错误,因为编译器假定学生的类型为{},没有属性。我们可以通过使用类型断言来避免这种情况,如下所示。

interface Student { 
    name: string; 
    code: number; 
}
let student =  { }; 
student.name = "Rohit"; // Correct
student.code = 123; // Correct

在上面的示例中,我们使用属性namecode创建了Student接口。然后,我们对学生使用了类型断言,这是使用类型断言的正确方法。