TypeScript类型断言 – TypeScript开发教程

上一章TypeScript教程请查看:TypeScript类型推断
在TypeScript中,类型断言是一种告诉编译器变量类型的机制。当TypeScript确定赋值无效时,我们可以使用类型断言覆盖类型。如果我们使用类型断言,那么赋值总是有效的,因此我们需要确保我们是正确的。否则,我们的程序可能无法正常工作。
类型断言显式地告诉编译器,我们希望将实体视为不同的类型。它允许我们把任何数字当作一个数字,或者把数字当作一个字符串。类型断言通常在我们将代码从JavaScript迁移到TypeScript时使用。
【TypeScript类型断言 – TypeScript开发教程】类型断言的工作方式类似于类型转换,但它不像其他语言(如c#和Java)那样执行类型检查或数据重组。类型转换附带运行时支持,而类型断言对运行时没有影响。然而,类型断言纯粹是一个编译时构造,它为编译器提供关于我们希望如何分析代码的提示。
例子

let empCode: any = 111; let employeeCode = < number> code; console.log(typeof(employeeCode)); // : number

在上面的例子中,我们已经声明了一个变量empCode任何类型的。下一行中,我们将这个变量的值分配给另一个变量命名employeeCode。在这里,我们知道empCode是数字类型,即使我们为any。当我们分配empCode给employeeCode,我们断言empCode类型是number,现在employeeCode的类型是数字。
TypeScript断言提供了两种方法类型。他们是
  • 使用尖括号< >
  • 使用关键字as
使用尖括号< >在TypeScript中,我们可以使用角“括号< >”显示类型声明。
例子
let empCode: any = 111; let employeeCode = < number> code;

使用关键字asTypeScript提供了另一种通过使用“as”关键字来显示类型断言的方法。
例子
let empCode: any = 111; let employeeCode = code as number;

带对象的类型断言有时,我们可能会遇到这样的情况:我们有一个没有任何属性声明的对象,对于这种情况,编译器会给出一个错误。但是,通过使用类型断言,我们可以避免这种情况。我们可以通过下面的例子来理解它。
例子
let student = { }; student.name = "Hola"; //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> { }; student.name = "Hola"; // OK student.code = 123; // OK

在上面的例子中,我们用属性name和code创建了一个Student接口。然后,我们对Student使用类型断言,这是使用类型断言的正确方式。

    推荐阅读